Jenkins 공유 라이브러리 사용하기

Beginner

소개

Jenkins 공유 라이브러리 (Shared Libraries) 를 사용하면 여러 작업 (Job) 에서 파이프라인 코드를 재사용할 수 있습니다. 일반적인 라이브러리 구조에서는 vars/ 디렉토리에 간단한 사용자 정의 단계를 배치합니다. 파이프라인은 이 라이브러리를 로드하여 일반 파이프라인 함수처럼 해당 단계들을 호출할 수 있습니다.

이번 실습에서는 vars/sayHello.groovy를 포함한 로컬 공유 라이브러리를 준비하고, Jenkins 대시보드에서 이를 Global Pipeline Library 로 등록한 뒤, sayHello를 호출하는 파이프라인 작업을 생성하여 Jenkins 에서 출력 결과를 확인합니다.

공유 라이브러리 저장소 준비

이 단계에서는 Jenkins 공유 라이브러리를 위한 로컬 Git 저장소를 준비합니다. vars/ 디렉토리는 특별한 의미를 갖는데, 이 안의 각 .groovy 파일은 파일명과 동일한 이름의 파이프라인 단계 (Step) 가 됩니다.

다음 명령어를 실행하여 Jenkins 컨테이너 내부에 vars/sayHello.groovy를 생성합니다.

docker exec jenkins bash -lc '
set -e
rm -rf /var/jenkins_home/shared-lib-src /var/jenkins_home/shared-lib.git
mkdir -p /var/jenkins_home/shared-lib-src/vars
cd /var/jenkins_home/shared-lib-src
git init -b main
git config user.email "jenkins@example.com"
git config user.name "Jenkins Shared Library"
cat > vars/sayHello.groovy <<'"'"'EOF'"'"'
def call(String name = "LabEx") {
    echo "Shared library says hello to ${name}"
}
EOF
git add vars/sayHello.groovy
git commit -m "Add sayHello shared library step"
'

이제 저장소를 로컬 베어 (bare) Git 저장소로 게시하고 git://localhost/shared-lib.git을 통해 노출합니다.

docker exec jenkins bash -lc '
set -e
cd /var/jenkins_home/shared-lib-src
git init --bare --initial-branch=main /var/jenkins_home/shared-lib.git
git remote add origin /var/jenkins_home/shared-lib.git
git push origin main
touch /var/jenkins_home/shared-lib.git/git-daemon-export-ok
if [ -f /tmp/shared-lib-git-daemon.pid ]; then
  kill "$(cat /tmp/shared-lib-git-daemon.pid)" 2>/dev/null || true
  rm -f /tmp/shared-lib-git-daemon.pid
fi
git daemon --reuseaddr --base-path=/var/jenkins_home --export-all --detach --pid-file=/tmp/shared-lib-git-daemon.pid /var/jenkins_home
'

Jenkins 가 사용할 저장소 브랜치를 기록합니다.

docker exec jenkins git ls-remote git://localhost/shared-lib.git refs/heads/main | tee /home/labex/project/shared-library-repository.txt

출력 내용에 refs/heads/main이 포함되어 있어야 합니다.

Global Pipeline Library 등록

이 단계에서는 해당 저장소를 labex-shared-lib라는 이름의 Jenkins Global Pipeline Library 로 등록합니다. 파이프라인은 @Library를 사용하여 이 이름을 로드할 수 있습니다.

데스크톱 인터페이스를 엽니다. Firefox 가 자동으로 Jenkins 를 엽니다. 열리지 않으면 http://localhost:8080으로 접속하세요.

Jenkins 대시보드에서:

Manage Jenkins를 클릭한 다음 System을 클릭합니다.

Global Trusted Pipeline Libraries 또는 Global Pipeline Libraries 항목까지 스크롤하여 Add를 클릭합니다.

다음 값으로 라이브러리 정보를 입력합니다.

  • Name: labex-shared-lib
  • Default version: main
  • Allow default version to be overridden 체크
  • Load implicitly는 체크 해제
  • Retrieval method: Modern SCM
  • Source Code Management: Git
  • Project Repository: git://localhost/shared-lib.git
  • Credentials: - none -

Save를 클릭합니다.

Jenkins Global Pipeline Library 설정

다음 명령어를 실행하여 저장된 라이브러리 설정을 기록합니다.

docker exec jenkins sh -lc "grep -n -E '<name>labex-shared-lib</name>|git://localhost/shared-lib.git|<defaultVersion>main</defaultVersion>' /var/jenkins_home/org.jenkinsci.plugins.workflow.libs.GlobalLibraries.xml" | tee /home/labex/project/shared-library-config-lines.txt

라이브러리를 로드하는 파이프라인 생성

이 단계에서는 shared-library-demo라는 파이프라인 작업을 생성합니다. 이 파이프라인은 labex-shared-lib를 로드하고 vars/sayHello.groovy에 정의된 사용자 정의 sayHello('LabEx') 단계를 호출합니다.

Jenkins 대시보드에서:

New Item을 클릭하고 shared-library-demo를 입력한 뒤 Pipeline을 선택하고 OK를 클릭합니다.

Pipeline 섹션으로 스크롤합니다. DefinitionPipeline script로 유지합니다.

다음 스크립트를 입력합니다.

@Library('labex-shared-lib@main') _

node {
    stage('Use Library') {
        sayHello('LabEx')
    }
}

Save를 클릭합니다.

공유 라이브러리를 사용하는 Jenkins 파이프라인

다음 명령어를 실행하여 저장된 파이프라인 스크립트를 기록합니다.

docker exec jenkins sh -lc "grep -n -E '@Library|sayHello' /var/jenkins_home/jobs/shared-library-demo/config.xml" | tee /home/labex/project/shared-library-job-config.txt

공유 라이브러리 파이프라인 실행

이 단계에서는 파이프라인 작업을 실행합니다. Jenkins 는 로컬 Git 저장소에서 공유 라이브러리를 가져와 vars/sayHello.groovy를 로드하고 사용자 정의 단계를 실행합니다.

shared-library-demo 작업 페이지에서 Build Now를 클릭합니다.

빌드 기록에 #1이 나타나면 완료될 때까지 기다립니다. 빌드가 성공했다는 것은 Jenkins 가 라이브러리를 성공적으로 로드하고 파이프라인 스크립트를 실행했음을 의미합니다.

Jenkins 공유 라이브러리 빌드 결과

다음 명령어를 실행하여 빌드 결과를 저장합니다.

curl -fsS http://localhost:8080/job/shared-library-demo/1/api/json | tr ',' '\n' | grep '"result":"SUCCESS"' | tee /home/labex/project/shared-library-build-result.txt

공유 라이브러리 출력 확인

이 단계에서는 Jenkins 콘솔 출력을 확인합니다. 핵심 증거는 sayHello.groovy에 의해 출력된 라인입니다.

빌드 #1을 열고 Console Output을 클릭합니다.

콘솔에 Jenkins 가 labex-shared-lib를 로드하고 다음과 같이 출력하는 모습이 보여야 합니다.

Shared library says hello to LabEx

Jenkins 공유 라이브러리 콘솔 출력

다음 명령어를 실행하여 동일한 콘솔 증거를 저장합니다.

curl -fsS http://localhost:8080/job/shared-library-demo/1/consoleText | grep 'Shared library says hello to LabEx' | tee /home/labex/project/shared-library-console-lines.txt

요약

Jenkins 공유 라이브러리 저장소를 준비하고, 대시보드에서 Global Pipeline Library 로 등록한 뒤, 라이브러리를 로드하는 파이프라인 작업을 생성하여 Jenkins 콘솔 출력에서 사용자 정의 vars/ 단계가 성공적으로 실행되었음을 확인했습니다.