소개
현대적인 CI/CD 파이프라인에서 유연성과 자동화는 핵심 요소입니다. 빌드 작업에 값을 하드코딩하면 작업이 경직되고 관리하기 어려워집니다. Jenkins 는 빌드를 매개변수화하고 빌드 프로세스의 일부로 스크립트를 실행함으로써 이러한 문제를 해결할 수 있도록 지원합니다.
이번 실습에서는 유연한 Jenkins 작업을 만드는 방법을 배웁니다. 먼저 빌드 시점에 사용자 입력을 받을 수 있도록 매개변수를 추가합니다. 그런 다음, 빌드 단계로 셸 스크립트를 실행하고, 해당 스크립트에 매개변수를 전달하며, 빌드의 성공 또는 실패에 따라 조건부로 대응하는 빌드 후 조치를 구성하는 방법을 배웁니다. 이는 Jenkins 에서 강력하고 동적인 자동화 워크플로우를 구축하기 위한 필수 기술입니다.
환경에 Jenkins 인스턴스가 이미 실행 중입니다. 데스크톱에서 Firefox 브라우저를 열어 Jenkins 웹 인터페이스에 액세스할 수 있습니다. 브라우저는 자동으로 http://localhost:8080으로 열리므로 URL 을 수동으로 입력할 필요가 없습니다. 별도의 로그인은 필요하지 않습니다.
Freestyle 프로젝트 생성 및 매개변수화
이 단계에서는 새로운 Jenkins Freestyle 프로젝트를 생성하고 매개변수를 추가합니다. 매개변수를 사용하면 작업을 대화형으로 만들 수 있어 빌드가 트리거될 때마다 입력을 제공할 수 있습니다.
먼저 작업을 생성해 보겠습니다.
- 데스크톱 인터페이스에서 Firefox 브라우저를 엽니다. 브라우저는 자동으로
http://localhost:8080으로 열립니다. - Jenkins 대시보드에서 왼쪽 메뉴의 New Item을 클릭합니다.
- 항목 이름으로
parameterized-script-job을 입력합니다. - Freestyle project를 선택하고 OK를 클릭합니다.

작업 구성 페이지로 이동합니다. 이제 매개변수를 추가해 보겠습니다.
General 섹션에서 This project is parameterized 확인란을 선택합니다.

Add Parameter 드롭다운을 클릭하고 String Parameter를 선택합니다.
- Name:
GREETING_NAME - Default Value:
World - Description:
인사말에 사용할 이름을 입력하세요.
- Name:
Add Parameter 드롭다운을 다시 클릭하고 Choice Parameter를 선택합니다.
Name:
ENVIRONMENTChoices: (각 선택 항목을 새 줄에 입력)
DEV STAGING PRODDescription:
배포 환경을 선택하세요.
이 매개변수들은 이후 빌드 단계에서 사용할 수 있습니다.

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

셸 스크립트 빌드 단계 추가
이 단계에서는 작업의 빌드 프로세스에 셸 스크립트를 추가합니다. 이는 코드 컴파일, 테스트 실행 또는 애플리케이션 배포와 같은 작업을 수행하는 일반적인 방법입니다.
- Jenkins 에서
parameterized-script-job대시보드로 이동합니다. - 왼쪽 메뉴에서 Configure를 클릭합니다.
- Build Steps 섹션까지 아래로 스크롤합니다.
- Add build step 드롭다운을 클릭하고 Execute shell을 선택합니다.
- 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 ---"

- Save를 클릭하여 변경 사항을 적용합니다.
이제 작업을 실행하여 스크립트가 작동하는지 확인해 보겠습니다.
- 작업 페이지에서 Build with Parameters를 클릭합니다.
- 기본 매개변수 값을 그대로 두고 Build 버튼을 클릭합니다.
- 왼쪽에 있는 Build History에 새 빌드가 나타납니다. 빌드 번호 (예:
#1) 를 클릭합니다. - 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 구문을 사용하여 액세스할 수 있습니다.
parameterized-script-job의 Configure 페이지로 돌아갑니다.- Build Steps 섹션으로 스크롤하여 Execute shell 명령 상자를 찾습니다.
- 기존 스크립트를 다음 스크립트로 바꿉니다.
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과 $ENVIRONMENT가 echo 명령에서 직접 어떻게 사용되는지 확인하세요. 작업이 실행되면 Jenkins 는 이를 사용자가 선택한 값으로 대체합니다.
- Save를 클릭합니다.
이제 사용자 지정 매개변수로 빌드를 실행해 보겠습니다.
- Build with Parameters를 클릭합니다.
GREETING_NAME을LabEx로 변경합니다.ENVIRONMENT드롭다운에서STAGING을 선택합니다.- Build를 클릭합니다.
- 새 빌드의 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 작업을 중지시키는 신뢰할 수 있는 방법입니다.
실패를 시뮬레이션하도록 스크립트 수정
이제 특정 조건에서 실패하도록 스크립트를 수정해 보겠습니다.
parameterized-script-job의 Configure 페이지로 이동합니다.- 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 에 실패를 알립니다.
- Save를 클릭합니다.
실패 조건 테스트
이제 실패 조건을 테스트해 보겠습니다.
- Build with Parameters를 클릭합니다.
ENVIRONMENT로PROD를 선택하고 Build를 클릭합니다.- 빌드 기록에 빨간색 아이콘이 표시되며 빌드가 실패합니다.
- 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 파이프라인을 구축하는 데 필수적입니다. 이제 이러한 개념을 적용하여 자신만의 개발 및 배포 워크플로우를 자동화할 수 있습니다.

