Дженкінс - передача змінних між робочими місцями?


87

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

Як я можу запустити перше завдання з параметром, щоб, коли воно запускає друге завдання, використовувався той самий параметр?


Ми можемо використовувати так багато способів: Одним з найкращих способів є використання поточних параметрів завдання, або використання заздалегідь визначених параметрів у спрацьовуванні подальшого завдання
— ksr

1
Цей заголовок настільки заплутаний. Як це "передавати змінні між робочими місцями?". Також прийнятою відповіддю є плагін. Незрозуміло це!
— Ракіб

Відповіді:


73

Ви можете використовувати параметризований плагін запуску, який дозволить вам передавати параметри від одного завдання до іншого.

Вам також потрібно додати цей параметр, який ви передали з вищого та нижчого потоку.


10
Привіт, вибачте, що звучало як нуб, але чи нормально, якщо хтось може редагувати це з деталями про те, як це зробити за допомогою параметризованого плагіна тригера?
— Фаді

10
Примітка: Схоже, експортовані змінні середовища, створені в розділах сценарію bash, можуть бути замінені у вихідних параметрах (наприклад, 'export VERSION' не змусить 'UPSTREAM_VERSION = $ VERSION' приймати правильне значення; він просто отримує `` $ VERSION '').
— Марк Маккенна

21
Ця відповідь недостатня
— тарабайт

6
Я погоджуюсь, що має бути якийсь приклад передачі параметрів цільовому завданням. Поточна сторінка Параметризованого плагіна запуску не дає хорошої інформації про це. Наприклад, може бути тип синтаксису, який слід використовувати при передачі параметрів.
— skrii

2
Здається, плагін вже не працює. Дивіться довгий список відкритих питань . Я більше не можу передавати значення параметрів за допомогою цього плагіна. Будь-яке інше рішення?
— Markus L

38

1. Дії після збірки> Виберіть «Запустити параметризовану побудову на інших проектах»

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

Детальні кроки можна переглянути тут: -

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

Сподіваюся, це корисно :)


Ця відповідь задовольняє запитання, яке ставить OP, не вимагаючи плагіна або використання DSL.
— BTC

8
FYI, для цієї відповіді все ще потрібен плагін.
— Thomas Lee

Плагін є чудовим, коли, але він не може передавати значення змінних, встановлені в командних розділах виконання командної оболонки.
— Тара Прасад Гурунг

25

Загальноприйнятий відповідь тут не працює для мого використання. Мені потрібно було мати можливість динамічно створювати параметри в одній роботі та передавати їх в іншу. Як Марк Маккенна , здається, немає можливості експортувати змінну зі кроку побудови оболонки до дій після побудови.

Я домігся обхідного способу, використовуючи параметризований плагін запуску , записавши значення у файл і використовуючи цей файл як параметри для імпортування за допомогою "Додати дію після збірки" -> "Створити параметризовану збірку ...", потім вибравши "Додати параметри" - > 'Параметри з файлу властивостей'.


Це те, що мені потрібно. Дякую.
— luckytaxi

Якщо ви бажаєте використовувати конвеєр jenkins 2.x, ви можете скопіювати writeFile / stash-> unstash / readFile для копіювання даних стану між завданнями. slideshare.net/ericlongtx/... Отримайте приклад для слайда 21.
— сієста

Це потрібно, якщо ви хочете, щоб пройшли змінні SHELL. Дуже вдячний за цю відповідь.
— Карл Уейнрайт,

17

Я думаю, що відповідь вище потребує оновлення:

Я намагався створити динамічний каталог для зберігання моїх артефактів збірки вище, тому я хотів передати свій номер збірки завдання вище за течією. Я спробував описані вище дії, але не зміг змусити це працювати. Ось як це працювало:

  1. Я скопіював артефакти з моєї поточної роботи за допомогою плагіна копіювання артефактів.
  2. У дії після збірки попереднього завдання я додав змінну типу "SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}" і сконфігурував її для запуску подальшої роботи.
  3. Все працювало, за винятком того, що моя подальша робота не змогла отримати $ SOURCE_BUILD_NUMBER для створення каталогу.
  4. Отже, я з’ясував, що для використання цієї змінної я повинен визначити ту саму змінну в задачі низхідного потоку як змінну параметра, як на малюнку нижче:

введіть тут опис зображення

Це пов’язано з тим, що нова версія jenkins вимагає від вас також визначити змінну в подальшому завданні. Сподіваюся, це корисно.


Повністю згоден. Це обов’язкове оновлення, яке на 100% завершує початкову відповідь.
— CodeSlave

10

(для колег 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 '------------------------------------'

Плагін Build Flow застарілий, користувачі повинні перейти на wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin
— vhamon,

7

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

Для того, щоб передати динамічно створений параметр, ви також можете експортувати змінну в плитку «Виконати оболонку», а потім передати її через «Триггер параметризованої збірки на інших проектах» => «Попередньо визначені параметри» => дайте «YOUR_VAR = $ YOUR_VAR». Моя команда використовує цю функцію для передачі версії пакета npm із завдання збірки на завдання розгортання

ОНОВЛЕННЯ: вище працює лише для введених параметрів Дженкінса, параметр, створений із оболонки, все одно повинен використовувати той самий метод. напр. echo YOUR_VAR = $ {YOUR_VAR}> variable.properties і передайте цей файл нижче


3

Я зіткнувся з такою ж проблемою, коли мені довелося передати пом-версію на нижчу роботу Rundeck.

Що я зробив, використовував введення параметрів через файл властивостей як такий:

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

Дії побудови:

  • Виконайте сценарій оболонки
  • Введіть змінні середовища

Наприклад: визначення властивостей

2) Передача визначених властивостей до подальшого завдання: Дії збірки після:

  • Запустити параметризовану побудову на іншому проекті
  • Додати параметри: поточні параметри збірки
  • Додати параметри: заздалегідь визначені параметри

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

3) Тоді можна було використовувати $ POM_VERSION як таку в подальшій роботі Rundeck.

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

/! \ З якоїсь причини під час створення запущеної збірки для передачі властивостей було потрібно додати опцію 'Поточні параметри збірки'.


РЕДАГУВАТИ: Знайшов блопер у тому, що я писав. У визначенні властивостей це мало бути: echo POM_VERSION = $ POM_VERSION> play.properties, а не: echo $ POM_VERSION >> play.properties Вибачте за це.
— Eli Mous

2

Читаючи відповіді, я не бачу іншого варіанту, який мені подобається, тому я його також запропоную. Я люблю параметризацію робочих місць, але це не завжди добре масштабується. Якщо у вас є завдання, які знаходяться не безпосередньо за першим завданням, а далі по конвеєру, ви насправді не хочете параметризувати кожне завдання в конвеєрі, щоб мати можливість передавати параметри до кінця. Або якщо у вас є велика кількість параметрів, що використовуються для різних інших завдань (особливо тих, які не обов’язково прив’язані до одного батьківського чи головного завдання), знову параметризація не працює.

У цих випадках я віддаю перевагу виведенню значень у файл властивостей, а потім ввожу це в будь-яку роботу, яка мені потрібна, за допомогою плагіна EnvInject . Це можна зробити динамічно, що є ще одним способом вирішення проблеми з іншої відповіді вище, де все ще використовувались параметризовані завдання. Це рішення дуже добре масштабується у багатьох сценаріях.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.