on
[Jenkins] Github 연동과 Declarative 파이프라인
[Jenkins] Github 연동과 Declarative 파이프라인
이전 포스팅에 이어 작성되는 글 입니다.
저번 포스팅에서
리눅스에서 도커로 Jenkins 풀
7000번 포트로 컨테이너 런
젠킨스 설정 및 깃헙 연동
깃헙 webhook 등록 -> (push -> build/test)
까지 해보았다. 이번에는 동일한 과정인데, 젠킨스 파이프라인으로 작성해보고자 한다.
젠킨스는 Web UI를 제공하지만, 파이프라인을 작성함으로써 더 많은 기능을 쓸 수 있다고 한다. 처음 해보는 것인 만큼 어렵겠지만 같이 도전해보도록 하자.
젠킨스 파이프라인
젠킨스 파이프라인이란, 연속적인 이벤트 혹은 Job의 그룹이다.
젠킨스 파이프라인은 생성된 Job들을 순차적으로, 병렬로 실행시키거나 특별하게 작성한 스크립트로 이벤트들을 연속적으로 실행시키는 등 여러 기능을 수행할 수 있다. 즉, 젠킨스 파이프라인을 실행하면 점검 시 일일이 수동으로 Job들을 실행하는 대신, 미리 정해둔 자동으로 Job들을 순차적, 병렬 실행이 가능하다.
해당 PlugIn이 설치되어 있어야 한다.
파이프라인은 두 가지 종류로 쓸 수 있다.
Declarative Scripted
각각 장단점도 있고 특징도 있지만, Scripted는 Groovy를 잘알아야 사용할 수 있다고 하므로,,, Declarative로 작성해보도록 하자.
Jenkins docs의 파이프라인 내용을 간략하게 써놓은 포스팅을 참고하면 좋다.
파이프라인 설정
#of executors에 쓰여진 수 만큼 동시에 실행할 수 있다. (병렬)
파이프라인 생성
new Item에서 'Pipeline'을 만든다.
//Jenkinsfile (Declarative pipeline) //선언적 파이프라인의 스켈레톤 구조이다. pipeline { agent any stages { stage('Build') { steps { // } } stage('Test') { steps { // } } stage('Deploy') { steps { // } } } }
선언적 파이프라인의 구조
Declarative 파이프라인은 하나의 Block안에 Directive와 Section을 포함하는 코드로 구성되어 있다.
각 섹션에는 Directive, Step, Conditionals가 존재한다.
Block
├Directive
│
└Section
├Directive
├Step
└Conditionals
Block
블록은 시작과 끝이 { }로 묶인 코드의 묶음이다.
pipeline{ }
Section
섹션은 전체 파이프라인의 흐름 내에서 특정한 시점에 실행이 필요한 Item을 묶는 방법이다.
묶인 아이템은 Directive, Step, Conditional를 포함할 수 있다. 섹션은 3가지 영역으로 구분할 수 있다
stages 파이프라인의 중심 로직을 정의하는 개별 stage의 정의를 묶는다
steps stage의 DSL step을 묶는다. (환경 변수와 같이 stage의 다른 아이템으로부터 스텝을 분리하는 역할을 한다.)
posts stage의 끝이나 파이프라인 실행의 마지막에 실행되거나 확인되야 할 step과 조건 값을 묶는다.
pipeline{ agent{ label "node" } stages{ // 1️⃣ stages stage("A"){ steps{ echo "========executing A========" // 2️⃣ steps } post{ always{ echo "========always========" // 2️⃣ steps } success{ echo "========A executed successfully========" } failure{ echo "========A execution failed========" } } } } post{ // 3️⃣ posts always{ echo "========always========" } success{ echo "========pipeline executed successfully ========" } failure{ echo "========pipeline execution failed========" } } } //출처: https://velog.io/@seunghyeon/Jenkins-%EC%84%A0%EC%96%B8%EC%A0%81Declarative-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8
Directive
디렉티브는 파이프라인에서
1) 값을 정의하고,
2) 행동을 설정하는,
3) 수행될 작업을 명시
하는 문장이나 코드 블록을 뜻한다.
Defines Values 값 정의 범주에 들어가는 예시는 agent 디렉티브 이는 전체 파이프라인이나 스테이지를 실행할 노드를 정할 수 있게 한다. 위의 예시 코드에서 agent {label "node"}가 해당됨.
Configures behavior 행동 설정 범주에 들어가는 옛는 triggers 디렉티브이다
Specifies actions to bo done 수행될 작업 명시 범주에 들어가는 예시는 stage 디렉티브이다. 내부에 실행될 DSL 스텝을 포함하고 있는 steps를 하위 요소로 갖는다. 위의 예시 코드에서 모든 step이 이에 해당한다.
선언적 파이프라인의 요소
pipeline
├ agent ┬ docker
│ └ dockerfile
├ environment
├ tools
├ options
├ triggers
├ parameters
├ libraries
├ stages ─ stage
└ post
Stage
단계를 분리하는 역할
prepare / build / deploy
build / test / deploy
등 세 단계로 구분하곤 하는데, 상황에 맞게 설정하기도 하며, 네이밍은 상관없다.
Jenkinsfile 작성
pipeline{ agent any stages{ stage('prepare'){ steps{ echo '=== PREPARE ===' git credentialsId: 'real_cred', url: 'https://github.com/rhacnddl/jenkinsTest.git' } } stage('build'){ steps{ echo '=== BUILD ===' sh 'chmod +x gradlew' sh './gradlew clean build' } } stage('deploy'){ steps{ echo '=== DEPLOY ===' } } } }
# References
https://velog.io/@kimsehwan96/Jenkins-Github%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%A6%AC%EC%95%A1%ED%8A%B8-%EC%95%B1-%EC%9E%90%EB%8F%99-%EB%B0%B0%ED%8F%AC-with-aws-S3
https://velog.io/@seunghyeon/Jenkins-%EC%84%A0%EC%96%B8%EC%A0%81Declarative-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8
from http://dev-gorany.tistory.com/343 by ccl(A) rewrite - 2021-09-29 21:00:30