Дженкинс - передача переменных между заданиями? - PullRequest
74 голосов
/ 14 марта 2012

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

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

Ответы [ 10 ]

68 голосов
/ 14 марта 2012

Вы можете использовать Parameterized Trigger Plugin , который позволит вам передавать параметры из одной задачи в другую.

Вам также необходимо добавить этот параметр, который вы передали из восходящего потока в нисходящий поток.

29 голосов
/ 17 апреля 2015

1.Post-Build Actions> Выбрать «Запуск параметризованной сборки в других проектах»

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

Подробные шагиможно увидеть здесь: -

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

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

19 голосов
/ 14 апреля 2016

принятый ответ здесь не работает для моего варианта использования.Мне нужно было иметь возможность динамически создавать параметры в одном задании и передавать их в другое.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Нет.* записав значения в файл и используя этот файл в качестве параметров для импорта через «Добавить действие после сборки» -> «Триггерная сборка с параметрами ...», затем выбрав «Добавить параметры» -> «Параметры из файла свойств».

12 голосов
/ 11 ноября 2016

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

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

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

enter image description here

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

10 голосов
/ 09 декабря 2013

(для коллег по Google)

Если вы строите серьезный конвейер с помощью плагина Build Flow , вы можете передавать параметры между заданиями с помощью 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 '------------------------------------'
7 голосов
/ 30 сентября 2016

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

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

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

2 голосов
/ 24 июля 2017

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

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

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

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

  • Выполнить скрипт оболочки
  • Ввод переменных среды

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

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

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

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

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

/! \ Jenkins Версия: 1.636

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

2 голосов
/ 30 марта 2017

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

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

1 голос
/ 13 ноября 2013

Вы можете использовать Hudson Groovy builder , чтобы сделать это.

Первая работа на конвейере

enter image description here

Вторая работа на конвейере

enter image description here

0 голосов
/ 31 октября 2016

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

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

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

...