Дженкинс - передача переменных между заданиями?


У меня есть две работы в jenkins, обе из которых нуждаются в одном и том же параметре.

Как я могу запустить первое задание с параметром, чтобы при запуске второго задания использовался тот же параметр?

10 65

10 ответов:

можно использовать Параметризованный Триггер Плагин что позволит вам передавать параметры от одной задачи к другой.

1.Действия после сборки > выберите "триггер параметризованной сборки на других проектах"

2.Введите переменную окружения со значением.Значением также могут быть параметры сборки Дженкинса.

подробные инструкции можно увидеть здесь :-

https://itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-from-one-job-to-another/

надеюсь, что это полезно :)

The принято отвечать здесь не работает для моего случая использования. Мне нужно было иметь возможность динамически создавать параметры в одном задании и передавать их в другое. Как Марк Маккенна упоминает, что, по-видимому, нет способа экспортировать переменную из шага сборки оболочки в действия post build.

Я достиг обходного пути с помощью Параметризованный Триггер Плагин путем записи значений в файл и использования этого файла в качестве параметров для импорта через ' Add действие после сборки '- > ' триггер параметризованной сборки...'затем выберите' Добавить параметры ' - > 'Параметры из файла свойств'.

(для коллег-гуглеров)

Если вы строите серьезный трубопровод с Build Flow Plugin, вы можете передавать параметры между заданиями с помощью DSL следующим образом:

предположим, что доступен строковый параметр "CVS_TAG", чтобы передать его другим заданиям:

build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
   // will be scheduled in parallel.
   { build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
   { build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])

подсказка для отображения доступных переменных / параметров:

// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'

Я думаю, что ответ выше нуждается в некоторых обновления:

Я пытался создать динамический каталог для хранения моих артефактов сборки вверх по течению, поэтому я хотел передать свой номер сборки задания вверх по течению в задание вниз по течению я попытался выполнить описанные выше шаги, но не смог заставить его работать. Вот как это работает:

  1. Я скопировал артефакты из моей текущей работы с помощью плагина копировать артефакты.
  2. в post build действие восходящего задания я добавил переменную, как "SOURCE_BUILD_NUMBER=${BUILD_NUMBER}" и настроил его для запуска нисходящего задания.
  3. все работало за исключением того, что мое нижестоящее задание не смогло получить $SOURCE_BUILD_NUMBER для создания каталога.
  4. поэтому я узнал, что для использования этой переменной мне нужно определить ту же переменную в задании потока вниз как переменную параметра, как на этом рисунке ниже:

enter image description here

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

просто добавьте мой ответ в дополнение к Найджелу Кирби, поскольку я пока не могу комментировать:

для того, чтобы пройти создаются динамически параметра, вы можете также экспортировать переменную в выполнять раковину, плитку, а затем пропустить его через 'вызвать параметризованный строить на других проектах' => 'стандартные параметры" => дать YOUR_VAR=$YOUR_VAR'. Моя команда использует эту функцию для передачи версии пакета npm из задания сборки в задания развертывания

обновление: выше работает только для вводимых параметров Дженкинса, параметр, созданный из оболочки, по-прежнему должен использовать тот же метод. например. echo YOUR_VAR=${YOUR_VAR} > переменная.свойства и передать этот файл вниз по течению

можно использовать Hudson Groovy builder для этого.

первая работа в трубопроводе

enter image description here

вторая работа в трубопроводе

enter image description here

Я столкнулся с той же проблемой, когда мне пришлось передать версию pom в нижестоящее задание Rundeck.

Что я сделал, использовал инъекцию параметров через файл свойств как таковой:

1) Создание свойств в файле свойств через оболочку:

действия сборки:

  • выполнить скрипт
  • ввести переменные окружения

например : определение свойств

2) Передача определенными свойства для последующей работы : Действия После Сборки:

  • триггер параметризованной сборки на другом проекте
  • добавить параметры : текущие параметры сборки
  • добавить параметры : стандартные параметры

например : свойства отправке

3) тогда можно было использовать $POM_VERSION как таковой в нижестоящем задании Rundeck.

/!\ Версия Дженкинс : 1.636

/!\ По какой-то причине при создании инициированной сборки необходимо было добавить опцию "текущие параметры сборки" для передачи свойств.

читая ответы, я не вижу другого варианта, который мне нравится, так что предложу его тоже. Мне нравится параметризация заданий, но она не всегда хорошо масштабируется. Если у вас есть задания, которые не находятся непосредственно ниже по потоку от первого задания, но дальше по конвейеру, вы действительно не хотите параметризовать каждое задание в конвейере, чтобы иметь возможность передавать параметры полностью. Или если у вас есть большое количество параметров, используемых другую работу (особенно не обязательно привязан к одному родительскому или главному заданию), опять же параметризация не работает.

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

смотрите мой ответ в другой пост:

работал на меня (параметр должен быть указан в обоих заданиях, а не только в Родительском задании)

https://stackoverflow.com/a/40348900/2010136