2012-03-14 3 views

ответ

56

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

+7

Привет, извините за звучание как нуб, но все в порядке, если кто-то может отредактировать это с подробностями о том, как это сделать с помощью параметрированного плагина Trigger? – Fadi

+0

На странице плагина есть достойное объяснение того, как действовать, и после того, как вопросительные знаки установки с правой стороны каждой опции имеют довольно хорошее объяснение того, как использовать плагин. Что еще вам нужно? –

+5

Сторона примечания. Не похоже, что переменные экспортируемой среды, созданные в разделах сценариев bash, могут быть заменены в выходных параметрах (например, «export VERSION» не приведет к тому, что «UPSTREAM_VERSION = $ VERSION» примет правильное значение; вместо этого получает '$ VERSION'. –

2

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

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

enter image description here

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

enter image description here

9

(для коллег Googlers)

Если вы строите серьезный трубопровод с 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']) 

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

// 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 '------------------------------------' 
25

1.Post-BUILD Действия> Выберите «Триггерная параметрированная сборка для других проектов»

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

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

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

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

+0

Этот ответ удовлетворяет заданию OP, не требуя плагина или использования DSL. – BTC

+2

FYI, этот ответ по-прежнему нужен плагин. –

+0

Плагин отлично подходит, но не может передавать значения переменных, заданные в командных разделах оболочки выполнения. –

12

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

Я достиг обходного пути, используя Parameterized Trigger Plugin, записав значения в файл и используя этот файл в качестве параметров для импорта через «Добавить пост-сборку» -> «Триггер-параметризованная сборка ...», затем выберите «Добавить параметры» '->' Параметры из файла свойств '.

+0

Вот что мне нужно. Благодарю. – luckytaxi

+0

Если вы хотите использовать конвейер jenkins 2.x, вы можете использовать writeFile/stash-> unstash/readFile для копирования данных состояния между заданиями. http://www.slideshare.net/ericlongtx/jenkins-days-workshop-pipelines-eric-long Оформить заказ слайда 21 для примера. – siesta

6

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

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

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

5

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

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

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

enter image description here

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

1

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

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

2

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

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

1) Создание свойств в свойствах файла с помощью оболочки:

Постройте действия:

  • Выполнить скрипт
  • Инъекционные переменные среды

E.г: properties definition

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

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

Например: properties sending

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

/\ Jenkins Версия: 1,636

/\ почему при создании сработавшего сборки, надо было добавить опцию «Текущие параметры сборки», чтобы передать свойство!.

+0

РЕДАКТИРОВАТЬ: Нашел blooper в том, что я написал. В определении свойств, оно должно было быть: эхо POM_VERSION = $ POM_VERSION> play.properties и нет: эхо $ POM_VERSION >> play.properties К сожалению об этом. –

Смежные вопросы