Как продвигать конкретный номер сборки с другой работы в Jenkins?

Я установил Promoted Build Plugin от Jenkins и теперь я сталкиваюсь с некоторыми проблемами в продвижении сборки из существующей работы. Вот сценарий:

  1. Существует существующий Nightly Build работа, которая выполняется каждую ночь, с выполнением всех необходимых тестов и метрик;

  2. Существует существующий Deploy Build который принимает параметр ${BUILD_NUMBER} и развертывает сборку, которая имеет соответствующий ${BUILD_NUMBER} из Nightly Build

    • Скажем, [Nightly Build] бежал и успешно построил артефакт #39
    • Теперь я могу просто запустить [Deploy Build] в параметре #39 в качестве параметра
      • Артефакты из [Nightly Build] #39 будут развернуты

Все идет нормально. Теперь это часть, где я хочу добавить Build Promotions...

Это мне нужно для достижения

Есть ли способ продвинуть Nightly Build #39 (обратите внимание, что он уже был построен ранее) из Deploy Build ? Или, может быть, даже откуда-то, откровенно говоря, я как бы потерялся здесь:(

Я не вижу их с четкими отношениями Upstream/Downstream, потому что они не имеют: всегда запускает эту сборку, а затем другую во время выполнения - [Deploy Build] выполняется только иногда и не всегда после [Nightly Построить].

1 ответ

Решение

Обновление начиная с версии 2.23 параметризованного триггерного плагина:

С версией 2.23+ поведение изменилось (спасибо Abhijeet Kamble за указание). Любой параметр, передаваемый разделом " Предопределенные параметры " задания вызова (сборки), должен существовать в вызываемом (развертывании) задании. Кроме того, применяются ограничения параметров вызываемого задания, поэтому, если параметр вызываемого задания является выбором, он должен предварительно заполнить все возможные значения (из повышений). Или просто используйте текстовый тип параметра.

Решение

Да, у меня точно такая же настройка: задание на сборку (основанное на коммитах SVN) и выполненное вручную задание развертывания. Когда пользователь выбирает какую-либо сборку из задания сборки (включая более ранние сборки), он может затем перейти по ссылке " Состояние продвижения" и выполнить различные предложения по развертыванию, например, " Развернуть в DEV", " Развернуть в QA" и т. Д.

Вот как настроить продвижение по заданию на сборку:

  • Вам понадобятся следующие плагины: плагин с параметризованным триггером, плагин Promoted Builds
  • Вам также понадобится настроить действие по умолчанию " Архивировать артефакты" после этой сборки.
  • Флажок Продвигать сборки, когда
  • Определить имя "Deploy to DEV"
  • Под Критерием ставится галочка Только при утверждении вручную
  • В разделе Actions используйте Trigger / call builds для других проектов.
  • В Projects для сборки введите имя для вашего задания развертывания здесь
  • Установите флажок Блокировать, пока сработавшие проекты не завершат сборку
  • Отметьте эту сборку как неудачную, если запущенная сборка хуже или равна: FAILURE (отрегулируйте в соответствии со статусами задания развертывания)
  • Предопределенные параметры (код A)

Код А:

Server=IP_of_my_dev_server`  
Job=$PROMOTED_JOB_NAME`  
BuildSelection=<SpecificBuildSelector><buildNumber>$PROMOTED_NUMBER</buildNumber></SpecificBuildSelector>

Выше, в разделе " Предопределенные параметры ", имя слева от = - это параметры, которые определены в вашем задании на развертывание. А справа от = находятся значения, которые будут назначены этим параметрам при выполнении этой акции. Определяет три параметра Server, Job а также BuildSelection,

Параметр Server= мое собственное, так как моя работа по развертыванию может быть развернута на нескольких серверах. Однако если задание на развертывание жестко задано, чтобы всегда развертываться в определенном месте, вам это не понадобится.

Job= параметр обязателен, но имя параметра зависит от того, что вы настроили в своем задании на развертывание (я объясню конфигурацию там). Значение $PROMOTED_JOB_NAME должен оставаться как есть. Это переменная среды, о которой известно в процессе продвижения, и ссылающаяся на имя вашей работы по сборке (той, в которой настроен процесс продвижения)

BuildSelection= параметр обязателен Вся эта линия должна остаться как есть. Переданное значение $PROMOTED_NUMBER, который еще раз о продвижении в курсе. В вашем примере это было бы #39,

Флажок Блокировать до тех пор, пока инициированные проекты не завершат свои сборки, заставит процесс продвижения ждать до завершения задания развертывания. Если нет, процесс продвижения запустит задание на развертывание и завершится успешно. Ожидание завершения задания развертывания имеет то преимущество, что в случае сбоя задания развертывания звезда продвижения также будет отмечена как ошибка.

(Небольшое замечание: звезда продвижения будет успешной во время выполнения задания развертывания. Если произойдет сбой развертывания, он преобразуется в сбой только после завершения задания развертывания. Логично... но это может немного сбить с толку, если вы посмотрите на продвижение звезды до завершения развертывания)

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

  • Вам понадобится плагин Copy Artifacts
  • Под этой сборкой параметризован
  • Настройте параметр типа Выбор (или Текст) с именем Server (это имя должно совпадать с конфигурацией в Предопределенных параметрах продвижения в предыдущем разделе)
  • Варианты выбора: введите список возможных IP-адресов серверов, которые будут использоваться предопределенными параметрами рекламной акции в предыдущем разделе (см. Примечание об обновлении ниже)
  • Настройте параметр типа Выбор (или Текст) с именем Job (это имя должно совпадать с конфигурацией в Предопределенных параметрах продвижения в предыдущем разделе)
  • Варианты: введите имя вашего задания по умолчанию. Это необходимо, только если вы запускаете задание развертывания вручную. Когда задание развертывания запускается из продвижения, повышение предоставит значение (Job= из предопределенных параметров, которые мы настроили). Кроме того, если из предопределенных параметров рекламного мероприятия не передано значение, будет использовано первое значение выбора. Если между заданиями по сборке и развертыванию имеется отношение 1: 1, вы можете пропустить Job= параметр в конфигурации промоушена.
  • Обновление: начиная с версии 2.23 Параметризованного триггера, доступные варианты в конфигурации задания развертывания должны иметь все возможные значения, исходя из предопределенных параметров продвижения. Если вы не хотите этого ограничения, используйте "Текст" вместо "Выбор"
  • Настройте параметр типа Селектор сборки для Копировать артефакт с именем: BuildSelection
  • Селектор по умолчанию: последняя успешная сборка
  • По шагам сборки
  • Настроить Копировать артефакты из другого проекта
  • В названии проекта введите ${Job}
  • По какой сборке выбрать Specified by a build parameter
  • В поле Имя параметра введите BuildSelection (без ${...}!)
  • Сконфигурируйте остальное соответствующим образом для ваших артефактов, которые будут скопированы из задания сборки для развертывания рабочей области задания
  • Используйте скопированные артефакты внутри задания развертывания по мере необходимости для развертывания.

Итак, теперь с помощью указанного выше задания развертывания вы можете запустить его вручную и выбрать номер сборки из задания сборки, которое вы хотите развернуть (последняя сборка, последняя успешная, по номеру сборки и т. Д.). Вы, вероятно, уже настроили его очень похожим образом. Повышение в задании на сборку будет в основном выполняться одинаково и предоставлять номер сборки в зависимости от того, какое продвижение было выполнено.

Дайте мне знать, если у вас есть какие-либо проблемы с инструкциями.

Отмеченный ответ - отличное объяснение вопроса. Но я хотел бы предложить решение для тех людей, которые ищут "как продвигать конкретный номер сборки из другой работы в jenkins"

Мы можем использовать обобщенное решение для принудительного продвижения с использованием CURL и REST API. Вы можете выполнить curl из сценариев Shell или Groovy.

Shell Solution с использованием CURL:

    user_name="jenkins_user"
    user_token="token" 
    promotion_name="Test_Promote"
    jenkins_url="http://build-server.com"
    JOB_NAME="job_name"
    JOB_NO="job-no"

    url="--silent -u $user_name:$user_token $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name"
    curl $url


Groovy Soultion:
        user_name="jenkins_user"
        user_token="token" 
        promotion_name="Test_Promote"
        jenkins_url="http://build-server.com"
        JOB_NAME="job_name"
        JOB_NO="job-no"


def response = "curl -u $user_name:$user_token \" $jenkins_url/job/$JOB_NAME/$JOB_NO/promotion/forcePromotion?name=$promotion_name".execute().text

Как создать токен пользователя jenkins: https://jenkins.io/blog/2018/07/02/new-api-token-system/

Другие вопросы по тегам