Параметризация сборок и использование скриптов

JenkinsBeginner
Практиковаться сейчас

Введение

В современных конвейерах CI/CD гибкость и автоматизация являются ключевыми факторами. Жесткое кодирование значений в заданиях сборки делает их негибкими и сложными в управлении. Jenkins позволяет преодолеть это, параметризуя ваши сборки и выполняя скрипты как часть процесса сборки.

В этой лабораторной работе вы узнаете, как создать гибкое задание Jenkins. Вы начнете с добавления параметров, которые позволят вводить данные пользователем во время сборки. Затем вы научитесь выполнять shell-скрипты в качестве шага сборки, передавать параметры в эти скрипты и настраивать действия после сборки (post-build actions), которые условно реагируют на успех или неудачу сборки. Это фундаментальные навыки для создания надежных и динамичных рабочих процессов автоматизации в Jenkins.

Экземпляр Jenkins уже запущен в вашей среде. Вы можете получить доступ к веб-интерфейсу Jenkins, открыв браузер Firefox на рабочем столе. Браузер автоматически откроется по адресу http://localhost:8080, поэтому вам не нужно вводить URL вручную. Вход в систему не требуется.

Создание и параметризация проекта Freestyle

На этом шаге вы создадите новый проект Jenkins типа Freestyle и добавите в него параметры. Параметры делают ваши задания интерактивными, позволяя вводить данные при каждом запуске сборки.

Сначала создадим задание.

  1. Откройте браузер Firefox из настольного интерфейса. Браузер автоматически откроется по адресу http://localhost:8080, поэтому вам не нужно вводить URL вручную. Вход в систему не требуется.
  2. На панели управления Jenkins нажмите New Item (Новый элемент) в меню слева.
  3. Введите parameterized-script-job в качестве имени элемента.
  4. Выберите Freestyle project (Проект Freestyle) и нажмите OK.
Jenkins dashboard New Item button

Вы будете перенаправлены на страницу конфигурации задания. Теперь добавим параметры.

  1. В разделе General (Общие) установите флажок This project is parameterized (Этот проект параметризован).

    Jenkins job configuration page with parameters
  2. Нажмите раскрывающийся список Add Parameter (Добавить параметр) и выберите String Parameter (Строковый параметр).

    • Name (Имя): GREETING_NAME
    • Default Value (Значение по умолчанию): World
    • Description (Описание): Enter a name to be greeted. (Введите имя для приветствия.)
  3. Снова нажмите раскрывающийся список Add Parameter и выберите Choice Parameter (Параметр выбора).

    • Name (Имя): ENVIRONMENT

    • Choices (Варианты): (Введите каждый вариант с новой строки)

      DEV
      STAGING
      PROD
    • Description (Описание): Select the deployment environment. (Выберите среду развертывания.)

Эти параметры будут доступны для использования на последующих шагах сборки.

Jenkins job configuration page with parameters

Наконец, прокрутите страницу вниз и нажмите Save (Сохранить). Вы будете перенаправлены на главную страницу задания, где теперь вместо "Build Now" (Собрать сейчас) вы увидите опцию Build with Parameters (Собрать с параметрами).

Build with Parameters

Добавление этапа сборки с использованием Shell Script

На этом шаге вы добавите shell-скрипт в процесс сборки вашего задания (job). Это распространенный способ выполнения таких задач, как компиляция кода, запуск тестов или развертывание приложений.

  1. Перейдите на дашборд задания parameterized-script-job в Jenkins.
  2. Нажмите Configure (Настроить) в меню слева.
  3. Прокрутите вниз до раздела Build Steps (Шаги сборки).
  4. Нажмите на выпадающий список Add build step (Добавить шаг сборки) и выберите Execute shell (Выполнить 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 ---"
Jenkins job configuration page showing build steps
  1. Нажмите Save (Сохранить), чтобы применить изменения.

Теперь давайте запустим задание, чтобы увидеть скрипт в действии.

  1. На странице задания нажмите Build with Parameters (Собрать с параметрами).
  2. Оставьте значения параметров по умолчанию и нажмите кнопку Build (Собрать).
  3. Новая сборка появится в Build History (История сборок) слева. Нажмите на номер сборки (например, #1).
  4. Нажмите 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
Jenkins job console output

Передача параметров в Shell Script

На этом шаге вы научитесь использовать параметры, определенные в Шаге 1, в вашем shell-скрипте. Jenkins предоставляет параметры сборки как переменные окружения, к которым вы можете получить доступ в своем скрипте, используя синтаксис $VARIABLE_NAME.

  1. Вернитесь на страницу Configure (Настроить) для вашего parameterized-script-job.
  2. Прокрутите вниз до раздела Build Steps (Шаги сборки) и найдите поле команды Execute shell (Выполнить 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 и $ENVIRONMENT используются непосредственно в командах echo. Когда задание будет запущено, Jenkins заменит их значениями, выбранными пользователем.

  1. Нажмите Save (Сохранить).

Теперь давайте запустим сборку с пользовательскими параметрами.

  1. Нажмите Build with Parameters (Собрать с параметрами).
  2. Измените GREETING_NAME на LabEx.
  3. Выберите STAGING из выпадающего списка ENVIRONMENT.
  4. Нажмите Build (Собрать).
  5. Проверьте Console Output (Вывод консоли) для новой сборки.

Вывод теперь должен отражать предоставленные вами пользовательские значения.

Вывод консоли сборки Jenkins, показывающий выполнение параметризованного скрипта
--- 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, нам необходимо установить соответствующий плагин.

  1. В Jenkins нажмите на значок шестеренки в правом верхнем углу, чтобы открыть панель управления Jenkins, затем нажмите Plugins.
  2. Нажмите на вкладку Available plugins.
  3. Нажмите Check now, чтобы обновить список плагинов.
  4. В поле поиска введите Post build task.
  5. Установите флажок рядом с плагином и нажмите Install without restart.
  6. Дождитесь завершения установки.
Jenkins available plugins page searching for Post build task

Изменение скрипта для имитации сбоя

Теперь давайте изменим скрипт, чтобы он завершался с ошибкой при выполнении определенного условия.

  1. Перейдите на страницу Configure для вашего задания parameterized-script-job.
  2. В поле команды 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) любой ненулевой код выхода сигнализирует о сбое.

Теперь добавим действие после сборки, которое срабатывает при сбое.

Добавление действия после сборки

  1. Прокрутите вниз до раздела Post-build Actions.
  2. Нажмите Add post-build action и выберите Post-build task.
  3. В поле Log text введите Error:. Это указывает плагину искать этот конкретный текст в журнале сборки.
  4. В поле Script введите следующую команду:
echo "FAILURE DETECTED! Sending notification..."
Post-build task configuration with failure detection
  1. Нажмите Save.

Тестирование условия сбоя

Теперь протестируем условие сбоя.

  1. Нажмите Build with Parameters.
  2. Выберите PROD для параметра ENVIRONMENT и нажмите Build.
  3. Сборка завершится с ошибкой, что будет обозначено красным значком в Истории сборок (Build History).
  4. Проверьте Console Output. Вы увидите сообщение об ошибке из вашего основного скрипта и сообщение из вашего действия после сборки.
Console output showing build failure and post-build task
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 (непрерывной интеграции/непрерывной поставки), которые могут адаптироваться к различным входным данным и разумно обрабатывать ошибки. Теперь вы можете применять эти концепции для автоматизации собственных рабочих процессов разработки и развертывания.