빌드 매개변수화 및 스크립트 사용

JenkinsBeginner
지금 연습하기

소개

현대적인 CI/CD 파이프라인에서 유연성과 자동화는 핵심 요소입니다. 빌드 작업에 값을 하드코딩하면 작업이 경직되고 관리하기 어려워집니다. Jenkins 는 빌드를 매개변수화하고 빌드 프로세스의 일부로 스크립트를 실행함으로써 이러한 문제를 해결할 수 있도록 지원합니다.

이번 실습에서는 유연한 Jenkins 작업을 만드는 방법을 배웁니다. 먼저 빌드 시점에 사용자 입력을 받을 수 있도록 매개변수를 추가합니다. 그런 다음, 빌드 단계로 셸 스크립트를 실행하고, 해당 스크립트에 매개변수를 전달하며, 빌드의 성공 또는 실패에 따라 조건부로 대응하는 빌드 후 조치를 구성하는 방법을 배웁니다. 이는 Jenkins 에서 강력하고 동적인 자동화 워크플로우를 구축하기 위한 필수 기술입니다.

환경에 Jenkins 인스턴스가 이미 실행 중입니다. 데스크톱에서 Firefox 브라우저를 열어 Jenkins 웹 인터페이스에 액세스할 수 있습니다. 브라우저는 자동으로 http://localhost:8080으로 열리므로 URL 을 수동으로 입력할 필요가 없습니다. 별도의 로그인은 필요하지 않습니다.

Freestyle 프로젝트 생성 및 매개변수화

이 단계에서는 새로운 Jenkins Freestyle 프로젝트를 생성하고 매개변수를 추가합니다. 매개변수를 사용하면 작업을 대화형으로 만들 수 있어 빌드가 트리거될 때마다 입력을 제공할 수 있습니다.

먼저 작업을 생성해 보겠습니다.

  1. 데스크톱 인터페이스에서 Firefox 브라우저를 엽니다. 브라우저는 자동으로 http://localhost:8080으로 열립니다.
  2. Jenkins 대시보드에서 왼쪽 메뉴의 New Item을 클릭합니다.
  3. 항목 이름으로 parameterized-script-job을 입력합니다.
  4. Freestyle project를 선택하고 OK를 클릭합니다.

새 Freestyle 프로젝트 생성

작업 구성 페이지로 이동합니다. 이제 매개변수를 추가해 보겠습니다.

  1. General 섹션에서 This project is parameterized 확인란을 선택합니다.

    작업 매개변수 활성화

  2. Add Parameter 드롭다운을 클릭하고 String Parameter를 선택합니다.

    • Name: GREETING_NAME
    • Default Value: World
    • Description: 인사말에 사용할 이름을 입력하세요.
  3. Add Parameter 드롭다운을 다시 클릭하고 Choice Parameter를 선택합니다.

    • Name: ENVIRONMENT

    • Choices: (각 선택 항목을 새 줄에 입력)

      DEV
      STAGING
      PROD
      
    • Description: 배포 환경을 선택하세요.

이 매개변수들은 이후 빌드 단계에서 사용할 수 있습니다.

구성된 문자열 및 선택 매개변수

마지막으로 아래로 스크롤하여 Save를 클릭합니다. 작업 메인 페이지로 리디렉션되며, 이제 "Build Now" 대신 Build with Parameters 옵션이 표시됩니다.

작업 페이지의 Build with Parameters 링크

셸 스크립트 빌드 단계 추가

이 단계에서는 작업의 빌드 프로세스에 셸 스크립트를 추가합니다. 이는 코드 컴파일, 테스트 실행 또는 애플리케이션 배포와 같은 작업을 수행하는 일반적인 방법입니다.

  1. Jenkins 에서 parameterized-script-job 대시보드로 이동합니다.
  2. 왼쪽 메뉴에서 Configure를 클릭합니다.
  3. Build Steps 섹션까지 아래로 스크롤합니다.
  4. Add build step 드롭다운을 클릭하고 Execute shell을 선택합니다.
  5. Command 텍스트 영역에 다음 스크립트를 입력합니다. 이 스크립트는 Jenkins 작업 공간 내에 프로젝트 디렉토리 구조를 생성하고 그 내용을 나열합니다.
echo "--- Starting Build Step ---"
echo "Current directory:"
pwd
echo "Creating project directory structure:"
mkdir -p my-app
echo "Version 1.0" > my-app/version.txt
echo "Listing files in the project directory:"
ls -la my-app
echo "--- Build Step Finished ---"

셸 빌드 단계 실행

  1. Save를 클릭하여 변경 사항을 적용합니다.

이제 작업을 실행하여 스크립트가 작동하는지 확인해 보겠습니다.

  1. 작업 페이지에서 Build with Parameters를 클릭합니다.
  2. 기본 매개변수 값을 그대로 두고 Build 버튼을 클릭합니다.
  3. 왼쪽에 있는 Build History에 새 빌드가 나타납니다. 빌드 번호 (예: #1) 를 클릭합니다.
  4. Console Output을 클릭하여 로그를 확인합니다.

파일 목록을 포함하여 셸 스크립트의 출력을 확인할 수 있습니다.

Started by user unknown or anonymous
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/parameterized-script-job
[parameterized-script-job] $ /bin/sh -xe /tmp/jenkins....sh
+ echo --- Starting Build Step ---
--- Starting Build Step ---
+ echo Current directory:
Current directory:
+ pwd
/var/jenkins_home/workspace/parameterized-script-job
+ echo Creating project directory structure:
Creating project directory structure:
+ mkdir -p my-app
+ echo Version 1.0
+ echo Listing files in the project directory:
Listing files in the project directory:
+ ls -la my-app
total 12
drwxr-xr-x 2 jenkins jenkins 4096 ... .
drwxr-xr-x 3 jenkins jenkins 4096 ... ..
-rw-r--r-- 1 jenkins jenkins   12 ... version.txt
+ echo --- Build Step Finished ---
--- Build Step Finished ---
Finished: SUCCESS

셸 빌드 단계의 콘솔 출력

셸 스크립트에 매개변수 전달

이 단계에서는 1 단계에서 정의한 매개변수를 셸 스크립트 내에서 사용하는 방법을 배웁니다. Jenkins 는 빌드 매개변수를 환경 변수로 노출하며, 스크립트에서 $VARIABLE_NAME 구문을 사용하여 액세스할 수 있습니다.

  1. parameterized-script-jobConfigure 페이지로 돌아갑니다.
  2. Build Steps 섹션으로 스크롤하여 Execute shell 명령 상자를 찾습니다.
  3. 기존 스크립트를 다음 스크립트로 바꿉니다.
echo "--- Starting Parameterized Build Step ---"
echo "Hello, $GREETING_NAME!"
echo "Deploying to the $ENVIRONMENT environment."

## Create project structure if not exists and read the version from the file
mkdir -p my-app
echo "Version 1.0" > my-app/version.txt
APP_VERSION=$(cat my-app/version.txt)
echo "Application version is: $APP_VERSION"
echo "--- Parameterized Build Step Finished ---"

$GREETING_NAME$ENVIRONMENTecho 명령에서 직접 어떻게 사용되는지 확인하세요. 작업이 실행되면 Jenkins 는 이를 사용자가 선택한 값으로 대체합니다.

  1. Save를 클릭합니다.

이제 사용자 지정 매개변수로 빌드를 실행해 보겠습니다.

  1. Build with Parameters를 클릭합니다.
  2. GREETING_NAMELabEx로 변경합니다.
  3. ENVIRONMENT 드롭다운에서 STAGING을 선택합니다.
  4. Build를 클릭합니다.
  5. 새 빌드의 Console Output을 확인합니다.

출력에 제공한 사용자 지정 값이 반영되어야 합니다.

사용자 지정 매개변수 값이 표시된 콘솔 출력

--- Starting Parameterized Build Step ---
+ echo Hello, LabEx!
Hello, LabEx!
+ echo Deploying to the STAGING environment.
Deploying to the STAGING environment.
+ mkdir -p my-app
+ echo Version 1.0
+ cat my-app/version.txt
+ APP_VERSION=Version 1.0
+ echo Application version is: Version 1.0
Application version is: Version 1.0
+ echo --- Parameterized Build Step Finished ---
--- Parameterized Build Step Finished ---

셸 조건을 사용하여 빌드 실패 처리

이 단계에서는 셸 스크립트 내에서 직접 빌드 실패를 시뮬레이션합니다. 이는 배포 규칙을 위반했을 때 Freestyle 작업을 중지시키는 신뢰할 수 있는 방법입니다.

실패를 시뮬레이션하도록 스크립트 수정

이제 특정 조건에서 실패하도록 스크립트를 수정해 보겠습니다.

  1. parameterized-script-jobConfigure 페이지로 이동합니다.
  2. Execute shell 명령 상자에서 스크립트를 다음으로 바꿉니다.
echo "Deploying to the $ENVIRONMENT environment."

if [ "$ENVIRONMENT" = "PROD" ]; then
  echo "Error: Production deployment is not allowed!"
  echo "Failure handled by shell condition."
  exit 1
fi

echo "Deployment to $ENVIRONMENT was successful."

이 스크립트는 ENVIRONMENT 매개변수를 확인합니다. 값이 PROD이면 오류를 출력하고 상태 코드 1로 종료합니다. 셸 스크립트에서 0 이 아닌 종료 코드는 Jenkins 에 실패를 알립니다.

  1. Save를 클릭합니다.

실패 조건 테스트

이제 실패 조건을 테스트해 보겠습니다.

  1. Build with Parameters를 클릭합니다.
  2. ENVIRONMENTPROD를 선택하고 Build를 클릭합니다.
  3. 빌드 기록에 빨간색 아이콘이 표시되며 빌드가 실패합니다.
  4. Console Output을 확인합니다. 스크립트의 오류 메시지와 최종 Jenkins 빌드 상태가 표시됩니다.

빌드 실패가 표시된 콘솔 출력

Deploying to the PROD environment.
+ [ PROD = PROD ]
+ echo Error: Production deployment is not allowed!
Error: Production deployment is not allowed!
+ echo Failure handled by shell condition.
Failure handled by shell condition.
+ exit 1
Build step 'Execute shell' marked build as failure
Finished: FAILURE

DEV 또는 STAGING으로 빌드를 다시 실행하면 실패 조건이 트리거되지 않으므로 성공합니다.

요약

축하합니다. 유연하고 강력한 Jenkins 작업을 성공적으로 생성했습니다.

이번 실습에서 배운 내용은 다음과 같습니다.

  • String 및 Choice 매개변수를 사용하여 매개변수화된 Jenkins 작업 생성.
  • 빌드 프로세스의 일부로 셸 스크립트 실행.
  • 스크립트 내에서 빌드 매개변수를 환경 변수로 액세스하고 사용.
  • 스크립트에 조건부 논리를 구현하여 빌드 결과 제어.
  • 셸 조건 및 종료 코드를 사용하여 빌드 성공 또는 실패 여부 제어.

이러한 기술은 다양한 입력에 적응하고 오류를 지능적으로 처리할 수 있는 정교한 CI/CD 파이프라인을 구축하는 데 필수적입니다. 이제 이러한 개념을 적용하여 자신만의 개발 및 배포 워크플로우를 자동화할 수 있습니다.