В современных конвейерах 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. (Введите имя для приветствия.)
Снова нажмите раскрывающийся список Add Parameter и выберите Choice Parameter (Параметр выбора).
Name (Имя): ENVIRONMENT
Choices (Варианты): (Введите каждый вариант с новой строки)
DEV
STAGING
PROD
Description (Описание): 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 и выведет ее содержимое.
Нажмите 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 (непрерывной интеграции/непрерывной поставки), которые могут адаптироваться к различным входным данным и разумно обрабатывать ошибки. Теперь вы можете применять эти концепции для автоматизации собственных рабочих процессов разработки и развертывания.