Jenkins 2.x DSL 적용기
설 직전에 사용 중인 jenkins 서버가 버전이 올라갔다. 그리고 악몽(?)의 시작…
대략,
- 플랫폼 별 병렬 빌드를 위해 사용하던 buildflow 플러그인 결과물이 사라지는 현상
- 프로젝트 설정에서 buildflow 스크립트를 확인하거나 편집할 수 없는 현상
이 생겼다.
근데 최악의 문제는 아니었던게, 결과물이 보이지만 않고 서버 머신의 디스크에는 남아있더란; 비슷하게, buildflow 스크립트도 display: none
로 처리하고 있어서 스타일 수정하고나니 보이긴하더라.
Jenkins wiki에서는 새 DSL인 pipeline plugin으로 넘어가라고 한다. 그래서 이전 작업을 시작;
- Buildflow 의 병렬 빌드에 해당하는 parallel 태스크는 있다.
- Parameter 넘기는게 미묘하게 다르긴한데 — 어차피 groovy 이긴 함 — 약간의 삽질 후에는 성공
- Artifact 복사해올 때 이전에는 buildflow toolbox 를 썼는데, “Copy Artifact Plugin” 을 설치하고야 처리할 수 있었다.
- Gerrit trigger 메뉴가 없어서 당황; Gerrit trigger 를 클릭하고, 추가로 뜨는 gerrit 주소 설정을 추가하고 나서야 동작한다.
- Artifact archive 관련해서, 패턴 매칭에 실패하면 오류 처리한다. 이건 이미 해결된 이슈로 있더라. 오류 처리 끄는 플래그가 있음
- Downstream 프로젝트들을 빌드 성공 후 트리거해야하는데, 트리거하고 종료하는게 없어서 ?! 했는데,
build job
패러미터로wait: false
를 주면 되긴하더라.
이렇게 작업일 1일+를 날리면서 느낀 좋은 점을 요약해보자면.
- 새 DSL 로 모든 플러그인 / 작업 기능을 내보내고 있어서 설정 백업이나 신규 버전으로의 이전 작업은 어느 정도 편하게 할 수 있을 듯 하다.
- 심지어, DSL 을 Jenkinsfile 이란 이름으로 저장소에 포함하는 것도 가능하다.
- 새로운 선언형 (declarative) 와 기존의 스크립트스러운 빌드 방식을 모두 포함한다.
- 이 기반으로 작성하면 기존보다 훨씬 나은 시각화를 제공한다.
물론 좋기만 할리가.
- 새 DSL은 만들었는데, jenkins 없이 이걸 시험해볼 방법은 없다. 다만 replay 기능을 쓰면 점진적으로 문제를 찾는건 가능하다. 빌드 시간이 길다면야 이걸로 나아지는게 많지 않긴 한데;
- 선언형과 절차형 모두 지원하는데, 양쪽을 동시에 쓰면 애로사항이 꽃핀다. 특히나 모르고 문서 뒤지던 초기에 이 차이를 모르고 튀어나오는 groovy / JVM exception 에 많이 당함.
- Jenkins 2.x + pipeline 으로 넘어가면 과거로 돌아갈 수 없다. 아주 간단한 예로, 설정 파일을 XML 1.1 로 바꾼다. 대체 왜? 1.1 쓰는거 처음 봄. 다운그레이드했다가 잠시 지옥을 봤다.
여하튼; 새 DSL 부터 쓰는 사람은 꽤 편할지도? 나는 크게 당했지만.