소개
현대의 CI/CD 파이프라인에서 유연성과 자동화는 핵심 요소입니다. 빌드 작업에 값을 하드코딩하면 경직되어 관리하기 어려워집니다. Jenkins 는 빌드를 파라미터화하고 빌드 프로세스의 일부로 스크립트를 실행하여 이러한 문제를 극복할 수 있도록 지원합니다.
본 랩에서는 유연한 Jenkins 작업을 생성하는 방법을 배웁니다. 먼저 빌드 시 사용자 입력을 허용하는 파라미터를 추가하는 것부터 시작합니다. 그런 다음, 빌드 단계로 셸 스크립트를 실행하고, 해당 스크립트에 파라미터를 전달하며, 빌드의 성공 또는 실패에 조건부로 응답하는 빌드 후 조치 (post-build actions) 를 구성하는 방법을 학습합니다. 이는 Jenkins 에서 강력하고 동적인 자동화 워크플로우를 생성하는 데 필수적인 기술입니다.
귀하의 환경에서는 이미 Jenkins 인스턴스가 실행 중입니다. 데스크톱에서 Firefox 브라우저를 열어 Jenkins 웹 인터페이스에 액세스할 수 있습니다. 브라우저는 자동으로 http://localhost:8080으로 열리므로 URL 을 수동으로 입력할 필요가 없습니다. 로그인도 필요하지 않습니다.
프리스타일 프로젝트 생성 및 파라미터화
이 단계에서는 새로운 Jenkins Freestyle 프로젝트를 생성하고 파라미터를 추가하는 방법을 배웁니다. 파라미터를 사용하면 빌드가 트리거될 때마다 입력을 제공할 수 있어 작업을 상호작용적으로 만들 수 있습니다.
먼저, 작업을 생성해 보겠습니다.
- 데스크톱 인터페이스에서 Firefox 브라우저를 엽니다. 브라우저는 자동으로
http://localhost:8080으로 열리므로 URL 을 수동으로 입력할 필요가 없습니다. 로그인도 필요하지 않습니다. - 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:
Enter a name to be greeted.(인사할 이름을 입력하세요.)
- Name:
Add Parameter 드롭다운을 다시 클릭하고 Choice Parameter를 선택합니다.
Name:
ENVIRONMENTChoices: (각 선택 항목을 새 줄에 입력합니다)
DEV STAGING PRODDescription:
Select the deployment environment.(배포 환경을 선택하세요.)
이 파라미터들은 이후 빌드 단계에서 사용할 수 있게 됩니다.

마지막으로, 아래로 스크롤하여 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 admin
Running as SYSTEM
Building in workspace /var/jenkins_home/workspace/parameterized-script-job
[parameterized-script-job] $ /bin/sh -xe /tmp/jenkins15539247300321029374.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 Aug 22 01:56 .
drwxr-xr-x 3 jenkins jenkins 4096 Aug 22 01:56 ..
-rw-r--r-- 1 jenkins jenkins 12 Aug 22 01:56 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 ---"
echo 명령에서 $GREETING_NAME과 $ENVIRONMENT가 직접 사용되는 것을 확인합니다. 작업을 실행하면 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 ---
조건부 단계로 빌드 실패 처리
이 단계에서는 빌드 실패를 시뮬레이션하고, 빌드가 실패했을 때만 정리 또는 알림 스크립트를 실행하도록 빌드 후 조치 (Post-build Action) 를 사용합니다. 이는 복원력 있는 파이프라인을 구축하는 데 매우 중요합니다.
Post-build Task 플러그인 설치
Post-build task 조치를 사용하기 전에 필요한 플러그인을 설치해야 합니다.
- Jenkins 에서 오른쪽 상단 모서리의 톱니바퀴 아이콘을 클릭하여 Jenkins 관리 패널에 액세스한 다음 Plugins를 클릭합니다.
- Available plugins 탭을 클릭합니다.
- Check now를 클릭하여 플러그인 목록을 새로 고칩니다.
- 검색 상자에
Post build task를 검색합니다. - 해당 플러그인 옆의 확인란을 선택하고 Install without restart를 클릭합니다.
- 설치가 완료될 때까지 기다립니다.

실패 시뮬레이션을 위한 스크립트 수정
이제 특정 조건에서 실패하도록 스크립트를 수정해 보겠습니다.
parameterized-script-job의 Configure 페이지로 이동합니다.- Execute shell 명령 상자에서 스크립트를 다음 내용으로 대체합니다.
echo "Deploying to the $ENVIRONMENT environment."
if [ "$ENVIRONMENT" = "PROD" ]; then
echo "Error: Production deployment is not allowed!"
exit 1
fi
echo "Deployment to $ENVIRONMENT was successful."
이 스크립트는 ENVIRONMENT 파라미터를 확인합니다. 이 값이 PROD로 설정된 경우 오류 메시지를 출력하고 종료 코드 1로 종료합니다. 셸 스크립팅에서 0 이 아닌 종료 코드는 실패를 나타냅니다.
이제 실패 시 트리거되는 빌드 후 조치를 추가해 보겠습니다.
빌드 후 조치 추가
- Post-build Actions 섹션까지 아래로 스크롤합니다.
- Add post-build action을 클릭하고 Post-build task를 선택합니다.
- Log text 필드에
Error:를 입력합니다. 이는 플러그인에게 빌드 로그에서 이 특정 텍스트를 찾도록 지시합니다. - Script 필드에 다음 명령을 입력합니다.
echo "FAILURE DETECTED! Sending notification..."

- Save를 클릭합니다.
실패 조건 테스트
이제 실패 조건을 테스트해 보겠습니다.
- Build with Parameters를 클릭합니다.
ENVIRONMENT에 대해PROD를 선택하고 Build를 클릭합니다.- 빌드는 실패하며, 빌드 기록에서 빨간색 아이콘으로 표시됩니다.
- Console Output을 확인합니다. 메인 스크립트의 오류 메시지와 빌드 후 작업의 메시지를 모두 볼 수 있습니다.

Deploying to the PROD environment.
+ [ PROD = PROD ]
+ echo Error: Production deployment is not allowed!
Error: Production deployment is not allowed!
+ exit 1
Build step 'Execute shell' marked build as failure
Performing Post build task...
Match found for :Error: : True
Logical operation result is TRUE
Running script : echo "FAILURE DETECTED! Sending notification..."
[parameterized-script-job] $ /bin/sh -xe /tmp/jenkins14011006354379294736.sh
+ echo FAILURE DETECTED! Sending notification...
FAILURE DETECTED! Sending notification...
POST BUILD TASK : SUCCESS
END OF POST BUILD TASK : 0
Finished: FAILURE
빌드를 DEV 또는 STAGING으로 다시 실행하면 성공하며, 빌드 후 작업은 실행되지 않습니다.
요약
축하합니다. 유연하고 강력한 Jenkins 작업을 성공적으로 생성했습니다.
이 실습에서는 다음을 배웠습니다.
- String 및 Choice 파라미터를 사용하여 파라미터화된 Jenkins 작업 생성
- 빌드 프로세스의 일부로 쉘 스크립트 실행
- 스크립트 내에서 빌드 파라미터를 환경 변수로 접근 및 사용
- 빌드 결과를 제어하기 위해 스크립트에 조건부 로직 구현
- 빌드 로그 내용을 기반으로 트리거되는 post-build 액션 구성, 이를 통해 빌드 실패를 우아하게 처리
이러한 기술은 다양한 입력에 적응하고 오류를 지능적으로 처리할 수 있는 정교한 CI/CD 파이프라인 구축에 필수적입니다. 이제 이러한 개념을 적용하여 자체 개발 및 배포 워크플로우를 자동화할 수 있습니다.

