- 이번 포스트는 Jenkins의 작업을 구성하는 방식 중 Declarative pipeline의 문법을 사용하여 1) Shell Script를 사용해보는것, 2) File을 생성하고 저장하는 것 , 3) Jenkins서버의 다른 Job에 저장된 파일을 가져오는 것 을 구현해보는 것을 포스팅 하려합니다.
- 실제로 해보니 너무 자료양이 많아 2장의 경우 2~3개 포스팅으로 나눠야 할지도 모르겠습니다 ㅜㅜ
1장. Docker Image로 Jenkins 설치 + Github연동 + Pipeline으로 Helloworld 출력
2장. pipeline 예제작성 + 실행
- 2-1 : Shell , File, Artifacted File
- 2-2 : parallel(build), parallel(master - slave) , JSON 다루기
- 2-3 : 조건문/반복문 , slack 보내기
3장. Blue Ocean으로 Hello world 출력
4장. Blue Ocean으로 pipeline 예제작성 + 실행
- 2-1 : Shell , File, Artifacted File
- 2-2 : parallel(build), parallel(master - slave) , JSON 다루기
- 2-3 : 조건문/반복문 , slack 보내기
5장. Master <-> Slave CI 환경 구축해보기
- 참고자료
https://standard.cbu.cloudbees.com/cloudbees-university-jenkins-pipeline-fundamentals
This course is a prerequisite course for several DevOps World | Jenkins World 2018 live course. It concentrates on Declarative Pipeline with Blue Ocean and introduces advanced facilities that require use of Blue Ocean code editor.
standard.cbu.cloudbees.com
- 목차
1. 문법설명
2. Job List 만들기(View)
3. Shell Script 다루기
4. File 생성하기
5. File 생성 후 Jenkins 서버에 저장하기
6. Jenkins 서버에 저장된 다른 Job의 파일가져오기
----------------------------------------------------------------------------------------------------------------------------
1. 문법설명
- 이번 포스팅에서 사용할 Declarative Pipeline의 문법에 대해서 간단히 설명하겠습니다.
- Jenkins Pipeline에는 Declarative Pipeline과 Scripted Pipeline 2가지 방식이 존재합니다.
- 두 파이프라인 방식 모두 강력한 성능을 가지고 있지만, 좀더 정형화 되어있기에 Declarative Pipeline
쪽이 초보자가 익히기에 더 나은 것 같습니다.
- 개인적으로 양쪽다 공부해보고, 업무의 복잡도에 따라 어떤 방식을 선택할지 결정하는 것이 좋을 것 같습니다.
문법 | 의미 |
pipeline | 젠킨스의 파이프라인 코드라는 것을 선언 |
agent | 파이프라인을 빌드 할 곳을 선택 any : 추가적인 설정이 없다면 기본 설정된 master agent에서 실행된다. none : 설정안함 -> 따로 설정해주어야함 |
stages | 파이프라인의 작업의 단위인 stage를 위치시키는 블록 반드시 하나이상의 stage를 포함해야함 |
stage | 파이프라인의 작업(Check out, Test, Build, Deploy등등..)의 단위 반드시 1개이상의 steps를 포함해야함 |
steps | stage에서 정의한 대로 작업을 정의하는 곳 |
echo | 메시지를 출력함 ex : echo 'hello world' ※ 변수의 값을 출력할 경우 echo "여기는 ${VALUE} 입니다" -> "" 을 사용해서 감싼다 |
sh | shell script를 사용 |
writeFile | 파일을 생성 |
${ VALUE } | 변수의 값을 사용시 |
environment | 환경변수 설정 블럭 |
parameters | 변수 설정 블럭 |
post | 작업이 모두 끝나고 나서의 처리 |
※ 자주 사용할 용어정리
node / agent : 젠킨스를 사용해서 파이프라인등을 빌드 할때, 빌드되는 곳의 PC 또는 도커 컨테이너
node의 경우 Scripted Pipeline의 문법과 표기가 겹치지만 여기선 다른 의미임
master : 젠킨스 서버가 설치된 PC 또는 도커 컨테이너를 의미함
slave : 젠킨스 서버(master)를 통해 리모트로 조작하는 PC 또는 도커 컨테이너
----------------------------------------------------------------------------------------------------------------------------
2. Job List 만들기(View)
1) Jenkins 서버에 접속하여 all 옆의 " + " 아이콘을 클릭합니다.
2) View name을 입력 -> List View 에 체크 -> OK버튼 클릭
3) View의 설정에서 View에 Job을 추가하거나, 제거할 수 있습니다.
4) Job이 추가된 것을 확인
5) View를 선택한 후 Job을 작성하게되면 자동으로 View에 Job이 추가됩니다.
- 3.에서 사용할 Job을 미리 만들었습니다.
- DeclarativePipelineList로 명명한 View에 Job이 자동으로 추가된 것을 확인 할수 있습니다.
----------------------------------------------------------------------------------------------------------------------------
3. Shell Script 다루기
- sh 는 "빌드 되어지는 곳"에서 shell script를 실행하는 문법이다.
1) 예제 코드
2) Job 생성
- 2에서 작업하였으므로 생략
3) Build 해보기
- 빌드의 결과는 Stage View 플러그인의 표시로 간단한 내용(성공인지?, 실패인지?, 로그,)을 시각적으로 확인 할 수 있습니다.
- 구슬모양 아이콘은 성공시 파란색 실패시 붉은색이 됩니다. 클릭시 Full 로그를 확인 할 수 있습니다.
- #+ 숫자는 빌드의 대략적인 정보를 표시합니다.
※ 로그 분석
- sh 명령어를 연습하면서 sh 명령어가 실행되는 기본적인 위치등을 알수 있도록 Stage를 선언했습니다.
(1) 첫번째 Stage
- sh 를 통해 shell 명령어를 실행하면 기본적으로 프로젝트의 root폴더의 위치에서 실행 된다는 것을 알 수 있습니다.
(2) 두번째 Stage
- 명령어가 실행되는 위치를 지정해서 명령어를 실행하면 다른 위치에서도 shell script를 실행 가능합니다.
(3) 세번째 Stages
----------------------------------------------------------------------------------------------------------------------------
4. File 생성하기
※ 이번 예제에서는 파일을 생성하고, Jenkins에서 파라미터를 사용하는 방법을 같이 설명하려합니다.
1) 예제 코드
2) Job 생성
- Job 생성 시 나오는 설정 화면에서 -> "This project is parameterized" 체크하기
-> Add Parameter 클릭 -> "String Parameter" 선택
※ 여러 종류의 파라미터를 지정해서 빌드 할 수 있음. 이번 예제에서는 String 자료형의 파라미터를 사용합니다
- 다음과 같이 Name과 Default Value를 입력합니다. Description은 입력하지 않아도 빌드에 지장없음
3) Build 해보기
- Build 버튼의 위쪽에 파라미터를 확인 할 수 있습니다.
※ 이번 예제에서 사용되는 Pipeline의 경우 파라미터의 기본값설정등이 되어있지 않으므로 파라미터 설정없이 빌드 할 경우 빌드가 실패하게 됩니다.
※ 파라미터의 기본값을 설정하는 것은 추후 다시 설명예정
No such property 예외가 발생함!!
- 정상적으로 파라미터의 값을 설정하고 빌드 할경우
- 파라미터에 설정한 대로 파일이 생성되었고, 파일의 내용이 출력된 것을 확인 할 수 있습니다.
----------------------------------------------------------------------------------------------------------------------------
5. File 생성 후 Jenkins 서버에 저장하기
- writeFile 명령어를 통해 생성한 파일은 기본적으로 clone된 Pipeline프로젝트의 루트 디렉토리에 저장됩니다.
- 실무에서 Jenkins로 자동 배포되어지는 프로젝트라면 삭제되고 다시 생성되는 것이 하루에도 수십번 있을 수 있습니다. 만에하나 중요한 파일이라면 archiveArtifacts 명령어를 사용해 파일을 Jenkins 서버에 저장 할 수 있습니다.
- 이번 예제에서는 environment 로 Pipeline내에서 환경변수를 선언하는 방식, post로 빌드 후 처리에 대해서도 설명하겠습니다.
1) 예제코드
2) Job 생성
- 파라미터를 설정하여 Job을 생성합니다
3) Build 해보기
- Build 버튼을 클릭하여 빌드를 실행합니다.
- #+숫자를 클릭합니다
- Jenkins Web UI에서는 다음의 화면에서 Jenkins 서버에 저장된 파일을 확인 할 수 있습니다.
- 텍스트파일은 다음과 같이 내용도 확인 가능함
※ 파일의 위치를 확인해보기 ( Docker Jenkins Container에 직접접속하여 확인했습니다.)
- 접속방법
- 기본적으로 생성된 파일은 워크스페이스의 클론된 프로젝트 폴더내에 생성됩니다.
- pipeline에 post를 선언하여, 성공시 클론된 프로젝트 폴더를 삭제하는 명령 cleanWs를 추가합니다
- 그 후 다시 빌드를 해도 여전히 생성한 파일을 확인 할 수 있습니다.
- 워크스페이스를 확인해보면 PipelineTest04는 삭제된 것을 확인 할 수 있습니다.
- 결과만 간단히 알아보면 아래 화면에 나타나있는 경로에 파일이 저장되는 것을 알 수 있습니다.
※ 혹시 Jenkins 서버의 디스크 용량이 부족하다면 첨부파일이 너무 많은 것은 아닌지?
workspace를 정리해도 디스크 용량이 여전히 부족하다면 "archive"폴더를 확인해보시기 바랍니다.
----------------------------------------------------------------------------------------------------------------------------
6. Jenkins 서버에 저장된 다른 Job의 파일가져오기
- PipelineTest04에서 저장한 파일을 이제부터 생성할 PipelineTest05에서 가져와 복사해 보도록 하겠습니다.
- 변수를 설정하는 parameters 와 Pipeline안에서 groovy 프로그래밍 언어를 사용 할 수 있게 해주는 script를 같이 설명하겠습니다.
1) 예제코드
2) Job 생성
- 이번에는 특별히 변수를 설정하지 않고 그냥 생성하면 됩니다.
3) Build 해보기
- Build 버튼을 클릭하여 빌드를 실행합니다.
- 이번에는 결과를 Stage View플러그인에서 확인해보겠습니다.
- Stage View 플러그인의 붉게 표시한 부분을 포커스 하시면, Logs 버튼이 표시됩니다.
- 로그 버튼을 클릭시 Jenkins Server UI의 윗쪽에 로그가 표시되는 것을 확인 할 수 있습니다.
----------------------------------------------------------------------------------------------------------------------------
이상으로 2장. pipeline 예제작성 + 실행 - 2-1 : Shell , File, Artifacted File 을 마치겠습니다.
다음은 - 2-2 : parallel(build), parallel(master - slave) , JSON 다루기를 포스팅 하도록 하겠습니다.