회사에서 효율적인 CI/CD를 위해서 Jetbrains에서 나온 TeamCity, Github Action 그리고 Jenkins 중에 도입을 고려했는데, 서비스 중인 서버 중 한개의 가용 리소스가 많이 남아서, 설정이 비교적 앞의 2개 보다 어렵지만 제약 없이 무료로 사용할 수 있는 젠킨스를 도입하기로 결정하였다.
이에 따라 도입을 하면서 젠킨스 도입하면서 정리한 사항들을 올리려고 한다.
Jenkins는 오픈 소스 자동화 서버로, 지속적 통합(Continuous Integration, CI)과 지속적 배포(Continuous Delivery, CD)를 지원하는 도구입니다. Jenkins는 다양한 플러그인과의 연동을 통해 소프트웨어 개발의 전 과정을 자동화할 수 있으며, 빌드, 테스트, 배포 등의 작업을 효율적으로 관리할 수 있게 해줍니다. 개발자가 코드를 커밋할 때마다 Jenkins가 자동으로 코드를 빌드하고, 테스트하고, 특정 조건이 충족되면 배포까지 수행하는 파이프라인을 구축할 수 있습니다.
• 지속적 통합(CI): 개발자가 새로운 코드를 리포지토리에 푸시할 때마다 자동으로 빌드 및 테스트가 이루어져서 코드의 품질을 유지할 수 있습니다.
• 지속적 배포(CD): 성공적으로 빌드 및 테스트된 코드를 자동으로 프로덕션 환경에 배포하여 빠르고 안전하게 업데이트를 배포할 수 있습니다.
• 플러그인 확장성: Jenkins는 수천 개의 플러그인을 제공하여 거의 모든 도구 및 시스템과 연동할 수 있습니다.
아래는 Jenkins를 설치하고, GitHub과 연동한 후, develop 브랜치에 대해 CI/CD 파이프라인을 설정하는 단계별 가이드입니다.
Jenkins를 설치하는 방법은 운영체제에 따라 다를 수 있지만, 여기서는 Ubuntu 기준.
sudo apt update
sudo apt install openjdk-11-jdk
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
플러그인 설치: Jenkins 대시보드에서 Manage Jenkins -> Manage Plugins로 이동합니다.
GitHub 플러그인 설치: Available 탭에서 GitHub 플러그인을 검색하여 설치합니다.
Jenkins 재시작: 플러그인 설치 후 Jenkins를 재시작합니다.
Jenkins가 GitHub 저장소의 변경 사항을 실시간으로 감지할 수 있도록 Webhook을 설정합니다.
• GitHub 저장소로 이동하여 Settings -> Webhooks -> Add webhook을 클릭합니다.
• Payload URL에 Jenkins 서버의 URL을 입력합니다: http://your_server_ip:8080/github-webhook/
• Content type은 application/json으로 설정합니다.
• Which events would you like to trigger this webhook?에서 Just the push event.를 선택합니다.
• Add webhook 버튼을 눌러 Webhook을 생성합니다.
Jenkins에서 CI/CD 파이프라인을 설정하기 위해 Job을 생성합니다.
• Jenkins 대시보드에서 New Item을 클릭합니다.
• 프로젝트 이름을 입력하고, Pipeline을 선택한 후 OK를 클릭합니다.
• Pipeline 탭에서 Definition을 Pipeline script from SCM으로 설정합니다.
• SCM을 Git으로 선택합니다.
• Repository URL에 GitHub 저장소의 URL을 입력합니다.
• Branches to build 섹션에 */develop을 입력하여 develop 브랜치에서만 빌드가 실행되도록 설정합니다.
• GitHub에 접근하기 위한 Credentials를 추가합니다.
GitHub 저장소의 루트 디렉토리에 Jenkinsfile을 생성하고 CI/CD 파이프라인을 정의합니다. 예를 들어:
pipeline {
agent any
stages {
stage('Build') {
steps {
echo 'Building...'
// 예시로 Maven을 사용한 빌드
sh 'mvn clean install'
}
}
stage('Test') {
steps {
echo 'Testing...'
sh 'mvn test'
}
}
stage('Deploy') {
steps {
echo 'Deploying...'
// 배포 스크립트 실행
sh './deploy.sh'
}
}
}
}
해당 Jenkinsfile은 간단한 3단계 파이프라인으로, 빌드, 테스트, 배포를 순차적으로 실행합니다.
모든 설정이 완료되면 Jenkins 대시보드에서 해당 Job을 선택하고 Build Now 버튼을 클릭하여 파이프라인을 실행할 수 있습니다.
• 빌드 로그 확인: 빌드 히스토리에서 빌드 상태를 확인할 수 있으며, 각 단계별로 로그를 확인할 수 있습니다.
• 자동 빌드 트리거: GitHub에 develop 브랜치로 푸시할 때마다 Jenkins가 자동으로 빌드를 트리거합니다.
이렇게 설정하면, GitHub의 develop 브랜치에 코드가 푸시될 때마다 Jenkins가 자동으로 빌드, 테스트, 배포 과정을 수행하게 됩니다. 이는 지속적 통합과 지속적 배포의 핵심 개념을 구현할 수 있다.