젠킨스를 사용해 CD 파이프라인을 구현하고 통합할 때 사용하는 플러그인 스크립트 모음이다.
CD 파이프라인은 버전 제어 시스템에서 가져온 코드를 애플리케이션으로 만들어 고객과 사용자에게 전달할 때까지의 프로세스를 자동으로 실행할 수 있도록 코드로 작성한 표현식이다.
애플리케이션에서 수행하는 모든 변경사항은 최종 릴리스가 되기까지 복잡한 빌드 프로세스를 거친다.
코드를 작성할때는 API가 필요하다.
📂 파이프라인의 장점
💊 젠킨스 파이프라인으로 CI/CD 프로세스를 자동화할때의 장점
코드
파이프라인을 사용하면 애플리케이션의 CI/CD프로세스를 코드 형식으로 작성할 수있고, 애플리케이션의 소스 코드와 함께 코드 리포지터리에 저장할 수 있다.
빌드 프로세스를 기술하는 코드가 중앙 리포지터리에 저장되면 효과적으로 팀원들과 공유할 수 있다.
내구성 : 파이프라인은 젠킨스 서비스가 의도적으로 또는 우발적으로 재시작되더라도 문제없이 유지가 된다.
일시 중지 가능 : 파이프라인을 실행하는 도중 사람의 승인이나 입력을 기다리기 위해 중단하거나 기다리는 것이 가능하다.
다양성 : 파이프라인은 분기나 반복, 병렬처리와 같은 다양한 CI/CD요구사항을 지원한다.
확장성 : 파이프라인 플러그인은 다른 플러그인의 통합에 필요한 여러가지 기능을 지원하기 때문에 쉽게 확장이 가능하다.
📂 파이프라인 용어 이해
파이프라인 : 전체 빌드 프로세스를 정의하는 코드를 뜻한다. 빌드프로세스는 애플리케이션 빌드, 테스트, 배포와 관련된 여러단계로 구성된다.
노드 : 파이프라인을 실행하는 시스템이다.
스테이지 : 소프트웨어는 빌드, 테스트, 배포 등과 빌드 프로세스를 처리하는 다양한 단계를 거친다. 파이프라인의 스테이지 블록에서 특정 단계에서 수행되는 작업들을 정의한다.
스텝 : 파이프라인의 특정단계에서 수행되는 단일 작업을 의미한다. 스테이지 블록은 여러개의 스텝으로 구성된 블록일 뿐이다.
📂 파이프라인 구문
💊 젠킨스는 선언형 파이프라인과 스크립트형 파이프라인 두가지 유형을 지원한다.
1. 선언형 파이프라인
전체 블록 프로세스가 파이프라인 블록안에서 정의된다.
// Jenkinsfile
pipeline {
agent any // 젠킨스의 모든 에이전트에서 실행할 수 있다는 의미이다.
stages {
stage('Build') { // Build 스테이지 블록을 정의한다.
steps {
// Build 스테이지와 관련된 특정 스텝을 정의한다.
}
}
stage('Test'){ // Test 스테이지 블록을 정의한다.
steps {
// Test 스테이지와 관련된 특정 스텝을 정의한다.
}
}
stage('Deploy') { // Deploy 스테이지 블록을 정의한다.
steps {
// Deploy 스테이지와 관련된 특정 스텝을 정의한다.
}
}
}
}
2. 스크립트형 파이프라인
전체 빌드 프로세스가 노드 블록안에 정의된다.
노드 블록 안에 코드를 반드시 포함시킬 필요는 없으나, 코드가 포함된 경우에는 다음과 같은 작업이 수행된다.
젠킨스 큐에 아이템을 추가해 노드 블록 안에 스텝이 실행될 수 있도록 예약한다. 노드의 실행기를 사용할 수 있는 상태가 되면 즉시 스텝이 실행된다.
소스 관리 시스템에서 파일을 체크아웃하고, 작업할 수 있는 워크스페이스용 디렉터리를 생성한다.
node
{ //젠킨스에서 사용 가능한 모든 에이전트에서 실행할 수 있다.
stage('Build') // 빌드스테이지 블록을 정의한다. 스테이지 블록은 선택사항이다.
{
// 빌드 스테이지와 관련된 특정 스텝을 정의한다.
}
stage('Test') // 테스트 스테이지 블록을 정의한다.
{
// 테스트 스테이지 관련된 특정 스텝을 정의한다.
}
stage('Deploy') // 배포 스테이지 블록을 정의한다.
{
//배포 스테이지 관련된 특정 스텝을 정의한다.
}
}
📂 젠킨스에서 파이프라인 정의
💊 젠킨스 UI에서 간단한 파이프라인을 만드는 법
1. 젠킨스에 로그인한다.
2. 플러그인 설치 : pipeline:job플러그인을 설치한다.
3. 젠킨스 대시보드로 이동한다.
4. 파이프라인 작업을 생성 : 대시보드 메뉴에서 New Item링크를 클릭한다.
5. 작업 이름을 입력하고 pipeline항목을 선택한다.
General항목
🔖 Do not allow the pipeline to resume if the controller restarts (컨트롤러가 다시 시작할때, 파이프라인을 재개하지 않음)
: 파이프라인 작업을 선택했을 때만 나타나며, 해당 항목을 선택하면 젠킨스 컨트롤러가 다시 시작된 후에 파이프라인 실행이 재개되지 않는다.
: 파이프라인 작업을 실행할 때는 많은 데이터를 디스크에 기록하는데, 해당 이유는 젠킨스의 문제로 재실행이 되었을때 파이프라인도 재개될 수 있도록 대비하려는 것인데 해당 방식은 파이프라인 실행속도가 느려지는 문제가 있다.
Performance-optimized: much faster (requires clean shutdown to save running pipelines) : 성능에만 최적화된 가장 빠른 설정이다. 실행 중인 파이프라인을 지정하려면 클린 셧다운을 해야한다. 해당 옵션을 선택하면 젠킨스 파이프라인은 꼭 필요한 데이터만 기록한다.
Less durability, a bit faster (specialty use only) : 내구성은 낮고, 약간 빠른 설정이다. 특수한 용도에만 사용되면 해당 옵션을 선택하면 일부 데이터만 기록하기 때문에 내구성이 떨어진다.
Maximum survivability/durability but slowest : 내구성은 최대이나 가장 느린 설정이다. 기존부터 제공되는 옵션이며, 해당 옵션을 선택하면 최대한 데이터를 기록하므로 젠킨스의 문제 발생시 다른 옵션에 비해 우수한 내구성을 제공한다
🔖 파이프라인 코드를 작성할 수 있는 편집기
저장 후 작업을 실행하여 Console Output를 확인하면 HelloWorld가 출력된것을 확인할 수 있다.
생성된 스크립트를 복사한 후 템플릿 파이프라인 스크립트를 변경하기 위해 파이프라인 작업으로 돌아간다.
4-2. 작업> 파이프라인에서 필요 없는 부분을 삭제하고 필요한 stage 블록을 삽입하여 최종 Pipeline 스크립트를 완성한다.
stage코드에 Checking out Code를 추가하고, 그 코드 안에 깃 스텝을 넣는다.
stage('Checking out Code') { // for display purposes
// Get code from a Gitlab repository
git branch: 'Master', credentialsId: 'SSH_hyebin', url: 'git@gitlab.com:pranodayb_test/jenkinsbookcalculatorapi.git'
}
4-3. 메이븐의 deploy goal을 실행하는 배치 명령어가 필요하므로, 이를 수행하는 스텝을 만들기 위해 Pipeline Syntax: Snippet Generator로 이동한다. 이번에는 목록에서 bat: Windows Batch Script를 선택하고, Batch Script 편집 필드에 입력한다.
%MVN_HOME%\bin\mvn deploy
Generate Pipeline Script 버튼을 클릭하면 아래 스크립트 스텝이 생성된다.
bat '%MVN_HOME%\\bin\\mvn deploy'
해당 스크립트 스텝을 복사한 후, 새로 추가된 스테이지 내에 붙여 넣는다.
//최종
node
{
def mvnHome
stage('Checking out Code') { // for display purposes
// Get code from a Gitlab repository
git branch: 'Master', credentialsId: 'SSH_hyebin', url: 'git@gitlab.com:pranodayb_test/jenkinsbookcalculatorapi.git'
}
stage('Deploying CalculatorAPI on Nexus Repository')
{
mvnHome = tool 'MyMaven'
withEnv(["MVN_HOME=$mvnHome"])
{
bat "\"%MVN_HOME%\\bin\\mvn\" deploy"
}
}
}
- 스크립트 안에서 설명 주석은 //를 사용하고, 여러 줄 주석은 /* */ 사용한다. - def mvnHome: 이 문장은 mvnHome이라는 변수를 정의한다. - stage('Checking out Code'): 이 스테이지 내에 git 스텝은 리포지터리에서 코드 를 가져오는 작업을 수행한다. - mvnHome = tool 'MyMaven': 이 문장은 mvnHome의 값으로 (Tools에서 MyMaven이라는 이름으로 추가했던) 메이븐의 설치 경로를 지정한다.
📂 파이프라인 작업 실행 및 Calculator API 릴리스
파이프라인 작업을 생성했다. 작업을 실행하고, 새로운 버전의 CalculatorAPI를 릴리스 해보자!
릴리스 버전을 7.0으로 변경 후 커밋/푸시를 진행하고, 빌드가 성공하면 넥서스에 7.0이 생겼는지 확인하면 된다.