Введение
В современных конвейерах CI/CD гибкость и автоматизация являются ключевыми факторами. Жесткое кодирование значений в заданиях сборки делает их негибкими и сложными в управлении. Jenkins позволяет преодолеть это, параметризуя ваши сборки и выполняя скрипты как часть процесса сборки.
В этой лабораторной работе вы узнаете, как создать гибкое задание Jenkins. Вы начнете с добавления параметров, которые позволят вводить данные пользователем во время сборки. Затем вы научитесь выполнять shell-скрипты в качестве шага сборки, передавать параметры в эти скрипты и настраивать действия после сборки (post-build actions), которые условно реагируют на успех или неудачу сборки. Это фундаментальные навыки для создания надежных и динамичных рабочих процессов автоматизации в Jenkins.
Экземпляр Jenkins уже запущен в вашей среде. Вы можете получить доступ к веб-интерфейсу Jenkins, открыв браузер Firefox на рабочем столе. Браузер автоматически откроется по адресу http://localhost:8080, поэтому вам не нужно вводить URL вручную. Вход в систему не требуется.
Создание и параметризация проекта Freestyle
На этом шаге вы создадите новый проект Jenkins типа Freestyle и добавите в него параметры. Параметры делают ваши задания интерактивными, позволяя вводить данные при каждом запуске сборки.
Сначала создадим задание.
- Откройте браузер Firefox из настольного интерфейса. Браузер автоматически откроется по адресу
http://localhost:8080, поэтому вам не нужно вводить URL вручную. Вход в систему не требуется. - На панели управления Jenkins нажмите New Item (Новый элемент) в меню слева.
- Введите
parameterized-script-jobв качестве имени элемента. - Выберите Freestyle project (Проект Freestyle) и нажмите 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 (Собрать с параметрами).

Добавление этапа сборки с использованием Shell Script
На этом шаге вы добавите shell-скрипт в процесс сборки вашего задания (job). Это распространенный способ выполнения таких задач, как компиляция кода, запуск тестов или развертывание приложений.
- Перейдите на дашборд задания
parameterized-script-jobв Jenkins. - Нажмите Configure (Настроить) в меню слева.
- Прокрутите вниз до раздела Build Steps (Шаги сборки).
- Нажмите на выпадающий список Add build step (Добавить шаг сборки) и выберите Execute shell (Выполнить 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 (Вывод консоли), чтобы просмотреть логи.
Вы должны увидеть вывод вашего shell-скрипта, включая список файлов.
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

Передача параметров в Shell Script
На этом шаге вы научитесь использовать параметры, определенные в Шаге 1, в вашем shell-скрипте. Jenkins предоставляет параметры сборки как переменные окружения, к которым вы можете получить доступ в своем скрипте, используя синтаксис $VARIABLE_NAME.
- Вернитесь на страницу Configure (Настроить) для вашего
parameterized-script-job. - Прокрутите вниз до раздела Build Steps (Шаги сборки) и найдите поле команды Execute shell (Выполнить 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. - Выберите
STAGINGиз выпадающего спискаENVIRONMENT. - Нажмите 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) для запуска скрипта очистки или уведомления только в случае сбоя. Это критически важно для создания отказоустойчивых конвейеров (pipelines).
Установка плагина Post-build Task
Прежде чем мы сможем использовать действие Post-build task, нам необходимо установить соответствующий плагин.
- В Jenkins нажмите на значок шестеренки в правом верхнем углу, чтобы открыть панель управления Jenkins, затем нажмите Plugins.
- Нажмите на вкладку Available plugins.
- Нажмите Check now, чтобы обновить список плагинов.
- В поле поиска введите
Post build task. - Установите флажок рядом с плагином и нажмите Install without restart.
- Дождитесь завершения установки.

Изменение скрипта для имитации сбоя
Теперь давайте изменим скрипт, чтобы он завершался с ошибкой при выполнении определенного условия.
- Перейдите на страницу Configure для вашего задания
parameterized-script-job. - В поле команды 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. В сценариях командной оболочки (shell scripting) любой ненулевой код выхода сигнализирует о сбое.
Теперь добавим действие после сборки, которое срабатывает при сбое.
Добавление действия после сборки
- Прокрутите вниз до раздела Post-build Actions.
- Нажмите Add post-build action и выберите Post-build task.
- В поле Log text введите
Error:. Это указывает плагину искать этот конкретный текст в журнале сборки. - В поле Script введите следующую команду:
echo "FAILURE DETECTED! Sending notification..."

- Нажмите Save.
Тестирование условия сбоя
Теперь протестируем условие сбоя.
- Нажмите Build with Parameters.
- Выберите
PRODдля параметраENVIRONMENTи нажмите Build. - Сборка завершится с ошибкой, что будет обозначено красным значком в Истории сборок (Build History).
- Проверьте 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.
В этой лабораторной работе вы научились:
- Создавать параметризованное задание Jenkins с использованием параметров String (строка) и Choice (выбор).
- Выполнять shell-скрипты как часть процесса сборки.
- Получать доступ к параметрам сборки и использовать их как переменные окружения в ваших скриптах.
- Реализовывать условную логику в скрипте для управления результатом сборки.
- Настраивать действия после сборки (post-build actions), которые срабатывают на основе содержимого журнала сборки, позволяя корректно обрабатывать сбои сборки.
Эти навыки необходимы для создания сложных конвейеров CI/CD (непрерывной интеграции/непрерывной поставки), которые могут адаптироваться к различным входным данным и разумно обрабатывать ошибки. Теперь вы можете применять эти концепции для автоматизации собственных рабочих процессов разработки и развертывания.

