조직내 여러 프로젝트에서 젠킨스 파이프라인을 만들어서 사용하다보면 사실 공통 패턴이란게 생긴다. 이 공통패턴의 중복을 줄이기 위해 (Do not Repeat Yourself!) 젠킨스에서 제공하는 기능이다. 젠킨스 파일의 일부를 외부 저장소에 정의해두고, 기존 파이프라인안에 로드해서 사용할 수 있도록 한다. 이 기능이 Shared Libray임.
쉽게 말하면 별도 Git 저장소에 젠킨스 파이프라인 일부를 저장해두면, 젠킨스가 빌드 시점에 해당 깃 브랜치로 체크아웃해서 파이프라인에 추가해준다.
문법은 간단함. @Library('name') _ 이 다다.
@Library('cafe-pipeline-libraries') _
이런식으로 사용함.
@Library(['my-shared-library', 'otherlib@abc1234']) _
여러개 불러올 수도 있다.
참고로 _ 가 붙는 이유는, 그루비 애너테이션들은 반드시 어떤 대상에 붙어야 하기 때문임 애너테이션이 붙을 역할을 해주는 더미 심볼로 _ 를 사용함.
저 라이브러리가 위치한 git 주소는 어떻게 찾아가는가? 이건 젠킨스에서 Manage Jenkins > System > Global Pipeline Libraries에서 깃주소 넣어둬야 함.
Shared Library 저장소의 디렉터리 구조는 다음과 같음.
(root)
+- src # Groovy 소스 파일
| +- org/foo/Bar.groovy # org.foo.Bar 클래스
+- vars
| +- foo.groovy # 전역 변수 'foo'
| +- foo.txt # 'foo'에 대한 문서
+- resources # 리소스 파일 (external library 전용)
+- org/foo/bar.json
src/ : 파이프라인 실행시 클래스 패스에 추가되는 표준 java 소스 디렉토리vars/ : 파이프라인에서 변수로 노출될 스크립트 파일들. 파일명이 곧 변수명임 vars/log.groovy 파일에 def info(message) 라는 걸 정의해두면, 파이프라인에서는 저 변수 가져와서 log.info "hello world" 이런식으로 사용한다.resources/ : libraryResource 스텝에서 그루비 아닌 파일 로드하기 위해 사용하는 디렉토리