Jenkins 를 통해 GitHub CI/CD Pipeline 구축하기
이번 포스트에서는 Jenkins를 통해 GitHub의 Continuous Integration/Continuous Deployment (CI/CD), 지속적 통합 및 지속적 배포 파이프라인을 구축하는 방법에 초점을 맞춥니다.
GitHub은 협업과 소스 코드 관리를 위한 탁월한 플랫폼이지만, 자동화된 빌드 및 배포 프로세스를 구축하기 위해서는 Jenkins 와 같은 CI/CD 도구의 도움이 필요합니다. 이 글에서는 Jenkins를 활용하여 GitHub 저장소와의 연동, 소스 코드 변경 감지, 자동 빌드 및 배포 설정 등을 설명할 것입니다.
Jenkins가 이미 설치되어 있으며 GitHub 계정이 있다고 가정합니다.
목차
1. GitHub 저장소와 Jenkins 연동 설정
1-1. GitHub Repository에서 Token 발급
2. Jenkins에서 CI/CD 파이프라인 구성하기
2-1. Jenkins GitHub 연동 Plugin 설치
2-2. Jenkins Credentials 생성
2-3. GitHub Repository Webhooks 설정
2-4. Pipeline 작성
2-5. Jenkins Build 테스트
1. GitHub 저장소와 Jenkins 연동 설정
1-1. GitHub Repository에서 Token 발급
Jenkins 에서 GitHub 저장소에 접근할 수 있도록 Personal Access Token을 발급합니다.


Token의 저장소 접근 권한을 설정한 뒤, 발급 받은 token은 다시 볼 수 없기에 따로 저장합니다.
2. Jenkins에서 CI/CD 파이프라인 구성하기
2-1. Jenkins GitHub 연동 Plugin 설치
Jenkins에서 아래 플러그인들을 설치합니다.
- Generic Webhook Trigger Plugin: Jenkins의 Generic Webhook Trigger 플러그인은 외부 서비스로부터 HTTP POST 요청을 통해 Jenkins 작업을 트리거하는 데 사용됩니다. 이 플러그인을 사용하면 GitHub, GitLab, Bitbucket 등의 소스 코드 관리 시스템과 연동하여 CI/CD 파이프라인을 자동화할 수 있습니다.
- GitHub Integration Plugin: GitHub Integration 플러그인은 Jenkins와 GitHub 간의 원활한 통합을 제공하여 CI/CD 파이프라인을 구축하는 데 도움을 줍니다. 이 플러그인은 GitHub 웹훅을 트리거로 Jenkins 작업을 실행하고, GitHub API와 상호 작용하여 소스 코드를 가져오고 빌드를 실행합니다.
- GitHub API Plugin: GitHub API 플러그인은 Jenkins에서 GitHub API를 사용하여 GitHub 리포지토리에 대한 다양한 작업을 수행하는 데 도움을 줍니다. 이 플러그인은 Jenkins에서 GitHub API를 호출하여 코드 변경 내용을 가져오고, 빌드 상태를 GitHub에 보고하는 등의 작업을 수행할 수 있습니다.
2-2. Jenkins Credentials 생성
Jenkins Credentials는 Jenkins에서 사용되는 인증 정보를 안전하게 관리하기 위한 메커니즘입니다. 이를 통해 Jenkins에서 사용되는 비밀번호, API 토큰, SSH 키 등의 민감한 정보를 안전하게 저장하고 관리할 수 있습니다.
Jenkins에 접속하여 Credentials를 생성합니다.




Create 버튼을 누른 뒤, Credentials 생성을 확인합니다.

2-3. GitHub Repository Webhooks 설정
Push Event가 일어날 때, Jenkins와 GitHub 저장소를 연동하기 위해 WebHooks를 설정합니다.

Jenkins 서버의 URL을 작성하고, Add webhook 버튼을 클릭해 Push Trigger Webhook을 추가합니다.

2-4. Pipeline 작성
Repository Push Event 발생 시 동작 할 CI/CD의 파이프라인을 작성하기 위해 Jenkins에서 새로운 Item 추가 버튼을 클릭합니다.

생성 할 프로젝트 이름에서 Pipeline을 선택하고, Name을 작성하여 추가합니다.

GitHub 프로젝트를 체크하고, Repository의 URL 주소를 작성합니다.

Build Trigger 탭에서 GitHub Webhook Trigger 옵션을 체크합니다.

Pipeline 탭에서 Push Event 발생 시 동작할 Pipeline 스크립트를 작성합니다. 해당 파이프라인은 Jenkins가 실행되고 있는 서버 내부에서 동작하는 Script 입니다.

이 Jenkins 파이프라인 스크립트는 다음을 수행합니다:
git pull단계: ‘dev’ 브랜치에서 코드를 가져옵니다. GitHub의 자격 증명은github-token을 사용합니다.build단계: ‘nginx-****‘ 디렉토리로 이동하여 npm 종속성을 설치하고 빌드합니다.deploy단계: ‘nginx-‘ 디렉토리로 이동하여 빌드된 코드를 서버로 전송하고,SSH-Key와 SSH를 사용하여'backend@175.196.***.***'서버에서 접속하고 ‘dev_deploy.sh’ 스크립트를 실행합니다.
pipeline {
agent any
tools {
nodejs 'node18'
}
stages {
stage('git pull') { // use 'dev' branch
steps {
git branch: 'dev', credentialsId: 'github-token', url: 'https://github.com/******-repo/nginx-***-*****.git/'
}
}
stage('build') {
steps {
sh "pwd"
dir('nginx-****') {
sh "pwd"
sh "npm install"
sh "npm run build"
}
}
}
stage('deploy') {
steps {
sh "pwd"
dir('nginx-****') {
sh "pwd"
sshagent (credentials: ['ssh-key']) {
sh "scp -r dist/ backend@175.196.***.***:/home/backend/"
sh "ssh backend@175.196.***.*** './dev_deploy.sh'"
}
}
}
}
// stage...
}
}
2-5. Jenkins Build 테스트
GitHub Repository의 ‘dev’ branch에서 Push Event를 발생 시킵니다.

작성한 스크립트로 인해 자동적으로 Pipeline이 작동하는 것을 확인할 수 있습니다.

마이크로서비스 아키텍처에서 CI/CD를 구현하는 방법에 대해 NGINX STORE에 문의하여 자세히 알아보세요.
아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.
댓글을 달려면 로그인해야 합니다.