본 글은 Pipeline Syntax 중에서도 Declarative 방식에 대한 문법만 기술한다.
(Pipeline Syntax의 종류는 yeonyeon.tistory.com/86 의 'Jenkins 문법의 종류에 대해서' 부분에 간단히 기술했다.)
Declarative Pipeline
- Jenkins Pipeline에 비해 최근에 추가됨
- Pipeline 하위 시스템 위에서 더 간단한 문법을 제공한다.
- 유효한 syntax들은 모두 pipeline { } 블록 안에 존재한다.
- 블록은 Sections, Directives, Steps, assignment statements로 구성되어야 한다.
- pipeline { } 블록 내에서 코드 최대 크기를 제한하는 문제가 있다. (Scripted pipeline은 제한 X)
Declarative Pipeline의 최소한의 필수 구조는 다음과 같다.
pipeline
{
agent any
stages
{
stage ('stage name')
{
steps {
...
}
}
}
}
agent
- Jenkins 환경에서 전체 Pipeline이나 특정 stage가 실행될 위치를 지정
- pipeline { } 블록 내의 최상단에 정의
- 각 stage { } 블록의 최상단에도 정의가 가능하지만, 필수 사항은 아님
- agent any: 사용 가능한 agent.
- agent none: global agent는 설정 x. 각 stage에 설정 필요
- agent { label '..' }: 특정 label 명으로 된 environment로 설정
- agent { node { ... } }
- 이 외에도 docker, dockerfile, kubernetes 등 다양한 옵션이 있다.
stages
- 하나 이상의 stage를 포함
- Pipeline이 말하는 work의 대부분이 위치하는 곳
steps
- Declarative, Scripted 모두에서 기본 구성 요소 역할
- stage 지시문에서 실행될 하나 이상의 steps 정의
참고로 pipeline syntax들은 완벽히 외우고 있을 필요 없다.
프로젝트의 구성에서 Pipeline script를 입력할 때 하단의 Pipeline Syntax를 누른 뒤에 들어가지는 홈페이지에서,
값 입력하고 Generate Pipeline Script 버튼을 누르면 pipeline script가 자동으로 작성되므로 복붙하면 된다.
이 외 기타 자세한 문법은 포스트 하단의 참조 1에 자세히 나와있다.
알아두면 좋은 것
#1 Pipeline은 기본적으로 순차 실행이다.
- stage를 실행하다 오류가 생긴 경우, 그 뒤의 stage들은 실행하지 않는다.
-> parallel { } 블록 안에 stage 블록들을 넣으면 병렬 수행이 가능하다.
#2 maven, gradle, jdk 삽입하는 방법
-> tools { } 라는 자동 설치나 PATH에 추가할 도구를 정의할 수 있는 블록이 있다.
- 단, agent none으로 설정된 경우에는 무시된다.
pipeline {
agent any
tools {
maven 'apache-maven-3.0.1'
}
...
}
#3 값을 직접 입력하고 싶을 때.
- 기본적으로 argument가 없는 형식으로 동작되지만 값을 직접 입력하고 싶은 경우가 있다.
-> 이 때는 input { } 블록을 이용하면 된다.
- 만약 입력 단계가 오면 잠시 일시 중지 되었다가, 입력을 받은 후에 나머지가 실행된다.
- 입력한 parameters는 input을 사용한 stage에서 계속 사용 가능하다.
참조
1) Jenkins 공식 홈페이지: www.jenkins.io/doc/book/pipeline/syntax/#declarative-pipeline
2) parallel 블록 예시: oingdaddy.tistory.com/54
'Develop > etc' 카테고리의 다른 글
[Redmine] 설치부터 Eclipse 연동까지 (0) | 2021.04.28 |
---|---|
[Jenkins] Pipeline 이용하기 (with JUnit, SonarQube) (0) | 2021.04.26 |
[Gradle] gradle이란? (0) | 2021.04.16 |
[Jenkins] JUnit과 연동 (0) | 2021.04.06 |
[Jenkins] Sonarqube와 연동 (2) | 2021.04.05 |