git paramters plugin을 이용한 tag 버전 빌드
젠킨스 설치 문서를 참조해서 젠킨스와 git parameter 플러그인을 설치한다.
설명을 하기 위한 github 저장소를 하나 마련했다. Readme.md 파일 하나만 덩그러니 있다. 태그 정보를 확인하기 위한 것이라, 저장소에는 v0.1.0 이라는 태그를 하나 생성해뒀다.
테스트 저장소
jenkins에서 새로운 item을 하나 생성한다. 이름은 아무거나 하나 지정하고, 타입을 pipeline으로 설정한다.
생성한 item의 pipeline script
에 다음 스크립트를 추가해준다.
1 | pipeline { |
paramters 라고 지정한 블럭에서 실제 git parameter 플러그인에 대한 설정을 할 수 있다. defaultValue를 main 으로 지정한 것은, 젠킨스의 Build with Paramters
를 통해 수동으로 빌드를 시작하는 것이 아니라, web hook을 통해서 외부에서 빌드가 트리거되었을 경우에 main 브랜치의 내용으로 빌드하기 위해서이다.
Checkout stage 에서 git 저장소를 checkout 작업을 한다. 이 때 git paramter 플러그인으로부터 넘어오는 ${params.TAG} 을 이용하면, 특정 태그의 소스를 가져올 수 있다.
그러나, 실제 Packaging 작업에서 문제가 발생했다. 이 ${params.TAG} 값을 이용해서 패키지 이름을 지정하려고 하는데, Bad substition
에러가 발생하는 것이다. 구글링을 해보니 sh '''
대신에 sh"""
을 사용해보라고 되어 있다. 대체를 했지만, groovy.lang.MissingPropertyException: No such property: package_name for class: groovy.lang.Binding
와 같은 에러가 발생한다. jenkins 의 DSL은 groovy 기반으로 되어 있어, 이와 관련된 에러라고 예상이 된다.
결국, 직접 확인해볼 수 밖에 없다. 환경 변수를 확인하기 위해서 Packaging
의 스크립트를 다음과 같이 수정했다.
1 | ... |
다시 Build with Paramters
을 실행하고, 결과를 확인해보니, TAG=v0.1.0
이라는 변수 설정을 확인할 수 있다. 즉, bash shell로는 params.TAG
이 아니라 TAG
라는 값으로 넘어오는 것이다.
최종적으로는 다음과 같이 script를 작성해야 한다.
1 | pipeline { |
정리하자면, jenkins DSL을 사용할 때, bash shell을 은 다음을 주의해야 한다.
- 스트립트를 실행할 때, multi-line을 사용한다면 ‘’’ 블럭으로 감싸서 작성한다.
- git paramter에서 넘겨주는 값이 bash로 넘어가면서
params.
이 제외된 이름으로 할당된다.