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

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

Введение

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

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

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

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

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

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

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

Создание нового проекта Freestyle

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

  1. В разделе General установите флажок This project is parameterized.

    Включение параметров задания

  2. Нажмите выпадающий список Add Parameter и выберите String Parameter.

    • Name: GREETING_NAME
    • Default Value: World
    • Description: Введите имя для приветствия.
  3. Снова нажмите выпадающий список Add Parameter и выберите Choice Parameter.

    • Name: ENVIRONMENT

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

      DEV
      STAGING
      PROD
      
    • Description: Выберите среду развертывания.

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

Настроенные строковые параметры и параметры выбора

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

Ссылка Build with Parameters на странице задания

Добавление шага сборки со скриптом оболочки

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

  1. Перейдите на панель управления parameterized-script-job в Jenkins.
  2. Нажмите Configure в меню слева.
  3. Прокрутите вниз до раздела Build Steps.
  4. Нажмите выпадающий список Add build step и выберите Execute 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 ---"

Шаг сборки Execute shell

  1. Нажмите Save, чтобы применить изменения.

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

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

Вывод консоли шага сборки shell

Передача параметров в скрипт оболочки

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

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

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

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

--- 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 при нарушении правил развертывания.

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

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

  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!"
  echo "Failure handled by shell condition."
  exit 1
fi

echo "Deployment to $ENVIRONMENT was successful."

Этот скрипт проверяет параметр ENVIRONMENT. Если он установлен в PROD, скрипт выводит ошибку и завершается с кодом состояния 1. В скриптах оболочки любой ненулевой код завершения сигнализирует Jenkins о сбое.

  1. Нажмите Save.

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

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

  1. Нажмите Build with Parameters.
  2. Выберите PROD для ENVIRONMENT и нажмите Build.
  3. Сборка завершится с ошибкой, что будет отмечено красным значком в истории сборок.
  4. Проверьте 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.

В этой лабораторной работе вы научились:

  • Создавать параметризованное задание Jenkins с использованием строковых параметров и параметров выбора.
  • Выполнять скрипты оболочки в рамках процесса сборки.
  • Получать доступ к параметрам сборки и использовать их как переменные окружения внутри скриптов.
  • Реализовывать условную логику в скрипте для управления результатом сборки.
  • Использовать условия оболочки и коды завершения для управления успехом или неудачей сборки.

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