젠킨스 파이프라인 구성 (Jenkins Pipeline)
젠킨스 파이프 라인이란?
젠킨스 파이프 라인이란 연속적인 작업들을 젠킨스에서 하나의 파이프라인(작업)으로 묶어서 관리할 수 있게 만드는 플러그인이다.
1. CI/CD
먼저, 젠킨스 파이프라인이 결국 어떤 작업을 해주는지 명확하게 파악하려면 CI/CD를 알아야 한다.
CI란 Continuous Integration 즉, 지속적인 통합이라는 의미이다.
지속적인 통합이란, 어플리케이션의 소스 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레파지토리에 통합하는 것을 의미한다.
CD는 Continuous Delivery 혹은 Continuous Depolyment 두 용어 모두의 축약어이다.
전자인, Continuous Delivery는 공유 레파지토리로 자동으로 Release 하는 것을 의미하며, 지속적인 서비스 제공을 뜻한다.
후자인, Continuous Depolyment는 Production 레벨까지 자동으로 deploy 하는 것을 의미하며, 고객에게 배포하는 것을 뜻한다.
정리하면,
CI는 에플리케이션의 소스를 빌드, 테스트, 병합하는 것을 의미하고,
CD는 개발자의 변경 사항이 레파지토리를 넘어, 고객에게 배포하는 것까지를 의미한다.
2. Jenkins
그렇다면 레파지토리를 대상으로 소스를 가지고 와서 빌드 및 테스트를 한 후 배포까지의 일련의 작업들을 자동화할 수 없을까? 이 작업을 도와주는 툴이 바로 Jenkins이다.
즉, Jenkins는 Commit - Build - Test - Stage - Deploy 라는 일련의 CI/CD 프로세스를 자동화해줄 수 있다.
1) Item 선택
- Jenkins 는 다양한 Item을 선택하여 생성할 수 있다. 보통 Freetyle project와 Pipeline을 많이 사용하며, Freetyle project의 경우 간단한 빌드 및 배포를 할 경우 사용된다. Pipeline은 스크립트 언어인 Groovy 문법을 통해 좀 더 디테일한 일련의 작업들의 순서와 흐름을 정의할 수 있으며, 작업 별 성공/실패 유무와 로그를 파악하기에도 유용하다. 따라서 Pipeline을 통해 자동배포 환경을 구축해보자.
2) Item 구성
- Sciprt를 통해 작업들을 제어할 것이기 때문에, GitHub의 Push를 통해 WebHook으로 자동 빌드를 할 경우 Build Triggers의 hook trigger만 체크해 준다.
- Pipeline 정의
- 1) Pipeline script : 위의 사진과 같이 Jenkins내에서 Script를 작성하여 Pipeline을 구성한다. Jenkins내에서 작성을 하기 때문에 간편하다는 이점이 있다.
- 2) Pipeline script from SCM : SCM은 Git이나 SVN과 같이 형상관리툴을 의미하며, 소스쪽에 Jenkins 파일을 생성하여 별도로 Script를 작성하여 구성하는 방식이다. 보안상의 이점이 있기때문에 이 방식을 많이 사용한다.
=> 테스트 작업을 하는 것이기 때문에, 보다 간단한 Pipeline script로 작성해보려고 한다.
Pipeline Source
node {
stage 'Setting'
def javaHome = tool name: 'jdk8', type: 'hudson.model.JDK'
env.JAVA_HOME = "${javaHome}"
env.PATH = "${env.PATH}:${env.JAVA_HOME}/bin"
// github에서 소스 얻어오기
stage 'Checkout'
git branch: 'master', credentialsId: 'Your Credentials ID', url: 'Your GitHub URL'
// Maven으로 빌드 실행하기
stage 'Build'
def mvnHome = tool 'M3'
sh "'${mvnHome}/bin/mvn' -Dmaven.test.skip=true clean install"
// 패키지 저장
step([$class: 'ArtifactArchiver', artifacts: '**/target/*.jar', fingerprint: true])
// 서버실행
// stage 'Start'
// sh '/home/ec2-user/deploy.sh'
}
3) 환경구성
- 빌드를 하기위해, Jenkins에서 기초 환경 setting을 해줘야 한다. 소스를 가져오고 명령어를 사용하기 위해 Git이 필요할 것이며, 빌드를 하기위해 Maven과 JDK가 필요하다. 따라서 기존 PC에 설치가 되어 있는 경우 경로를 설정하여 지정해줄 수 있으며, Install automatically를 통해 자동 설치도 가능하다.
- Maven의 경우 버전에 따라 빌드 진행 중 오류가 발생할 수 있는 상황이 많으니 미리 체크해야 한다. (3.6.x 버전 이상에서는 http 프로토콜 지원x 등)
4) 자격 증명 설정
- Script를 통해 GitHub에서 Source를 Checkout을 하기 위해 당연히 해당 GitHub의 Username과 Password가 필요하다. 해당 정보를 Add Credentials를 통해 추가해주고 ID를 통해 Pipeline Script에서 Git Checkout 정보로 작성해 준다.
5) JOB 실행
- Script에서 작성한 Stage별로 성공/실패 유무를 한눈에 볼 수 있으며 해당 로그 및 히스토리도 확인이 가능하다. Script를 통해 Setting, Checkout, Build, Start라는 단계별 Stage를 정의하였으며, 이 Stage들이 모여 CI/CD를 진행시키는 하나의 pipeline을 구축한 것이다.