Как условно построить другие проекты?

У меня довольно сложная работа в Jenkins, которая собирает, тестирует и упаковывает веб-приложение. В зависимости от ситуации, я хотел бы делать разные вещи после завершения этой работы. Я не нашел повторно используемый / поддерживаемый способ сделать это. Это действительно так или я что-то упустил?

Варианты, которые я хотел бы иметь после завершения моей сложной работы:

Ничего не делать

Запустите мой конвейер сборки с низким уровнем риска:

копирует мой файл WAR в мой репозиторий артефактовразвертывает на производство

Запустите мой конвейер сборки с высоким уровнем риска:

копирует мой файл WAR в мой репозиторий артефактовразвертывает для тестированияпровести приемочные испытанияразвернуть к производству

Я не нашел простой способ сделать это. Самый простой, но не очень поддерживаемый подход - создать три отдельных задания, каждое из которых запускает последующую сборку. Такой подход пугает меня по нескольким причинам, включая тот факт, что изменения должны быть сделаны в трех местах, а не в одном. Кроме того, многие из последующих работ также практически идентичны. Единственная разница в том, какие нижестоящие рабочие места они называют. Похоже, что увеличение числа рабочих мест приведет к неразберихе.

Я рассмотрел использование нескольких подходов, чтобы сохранить это как одну работу, но ни один до сих пор не работал:

Сделать работу мультиконфигурационным проектом (https://wiki.jenkins-ci.org/display/JENKINS/Building+a+matrix+project). Это обеспечивает способ ввести задание с параметром. Я не нашел способ сделать "строить другие проекты " шаг реагирует на параметр.

Используйте плагин Parameterized-Trigger (https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin). Этот плагин позволяет запускать нисходящие задания на основе определенных триггеров. Триггеры кажутся слишком строгими. Oни'Все они основаны на состоянии сборки, а не на произвольных переменных. Я неЗдесь нет ни одной опции, которая бы подходила для моего варианта использования.

Используйте плагин Flexible Publish (https://wiki.jenkins-ci.org/display/JENKINS/Flexible+Publish+Plugin). Этот плагин имеет противоположную проблему, как плагин параметризованного триггера. У него есть много полезных условий, которые он может проверить, но это не так.Похоже, он может начать строительство другого проекта. Его действия ограничены типами публикаций.

Используйте плагин Flexible Publish + Any Build Step (https://wiki.jenkins-ci.org/display/JENKINS/Any+Build+Step+Plugin). Плагин Any Build Step позволяет сделать любое действие сборки доступным для плагина Flexible Publish. Хотя после активации этого плагина стало доступно больше действий, эти действия нет включает "строить другие проекты. "

Неужели нет простого способа сделать это? Я'Я удивлен, что у меня нетне нашел и еще больше удивился тому, что у меня нетнеужели кто-нибудь еще пытался это сделать? Я делаю что-то необычное? Есть ли что-то очевидное, чего мне не хватает?

 DXM16 июн. 2013 г., 09:25
... такой как плагин сборки конвейеране работает правильно. Ох, и тамНет страницы сайта / форума / документа, которая говорит, что вы должны редактировать глобальную конфигурацию jenkins, которая волшебным образом добавляет новые разделы. Я случайно заметил этот факт при прокрутке истории коммитов гибкого плагина издателя.
 DXM16 июн. 2013 г., 09:23
Я был до 4 утра прошлой ночью и вернулся к этому материалу в 9 утра этим утром еще на 5 часов, и в конце я собрал тот же список шагов / опций, которые вы только что перечислили ... потом мне пришлось пойти копать это :xkcd.com/979  Не уверен, что отличалось еще в октябре 2012 года, но ваш вариант 4 "почти" работает, если ты нене забудьте зайти в глобальный конфиг и сказать издателю, что он должен запустить ВСЕ параметры сборки, а не параметры по умолчанию. ОДНАКО проблема у меняТеперь я сталкиваюсь с тем, что когда вы используете издателя, это делает следующую работу "подпроект» вместо "нижестоящий проект " так что другие вещи ...

Ответы на вопрос(5)

вы сможете сделать это, выполнив следующие действия:

Первый шаг сборки:Работает ли регулярно. В вашем случае: сборка, модульное тестирование и упаковка веб-приложенияВ зависимости от результата позвольте ему создать файл с определенным именем.Это означает, что если вы хотите, чтобы изменения с низким уровнем риска выполнялись впоследствии, создайте файл с низким уровнем риска.Второй шаг сборки:СоздатьТриггер / вызов строится на других проектах Выйдите из плагина Parameterized-Trigger.Введите название вашей работы с низким уровнем риска в полеПроекты для строительства полеНажмите на:Добавить параметрВыберите:Параметры из файла свойствВойтинизкий risk.prop вИспользовать свойства из файла полевключитьДон»Т триггер, если какие-либо файлы отсутствуютТретий шаг сборки:Проверьте, существует ли файл с низким уровнем риска .propУдалить файл

Сделайте то же самое для работы с высоким риском

Теперь у вас должна быть следующая настройка:

если файл с именем low-risk.prop появляется во время первого шага сборки, запускается задание с низким уровнем рискаесли файл с именем high-risk.prop появляется во время первого шага сборки, запускается задание с высоким рискомесли там's нет .prop файла ничего не происходит

И этоЭто то, чего вы хотели достичь. Isn»не так ли?

 jadephantom11 июл. 2013 г., 16:41
Приятно видеть, что это помогло вам. Я счастлив, когда вижу, что мои предложения помогают другим людям :-).
 DXM16 июн. 2013 г., 20:44
Это предложение сработало полностью, как рекламируется. Спасибо!
 Michael27 авг. 2014 г., 09:04
Это выглядит как хакерский обходной путь, так как это нет один из 'Триггер, когда сборка ... ' опции. Увы, это может быть единственный способ сделать это без ручного создания сценариев сборки jenkins.
 DXM16 июн. 2013 г., 09:30
(для получения дополнительной информации см. мои комментарии выше)Я боролся с Дженкинсом три месяца, но я думаю, что это было всего 3 календарных дня или около того. Я'Мы пробовали различные плагины, используя их как задумано, или используя $ - назад, чтобы посмотреть, решит ли это хотя бы половину проблемы. Вы, сэр, только что предоставили мне другое оружие против этого зверя. Конечно, для некоторых, может быть, то, что вы сказали, очевидно, но я говорю, что эта идея блестящая !! +100 (при условии, что это работает, что я попробую завтра)

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



https://wiki.jenkins-ci.org/display/JENKINS/Post+build+task

Он будет искать в журнале консоли RegEx, который вы укажете, и, если найден, выполнит пользовательский скрипт. Вы можете настроить довольно сложные критерии и настроить несколько наборов критериев, каждый из которых выполняет разные задачи после сборки.

Это нене дает вам обычногошаг " действия, так что выЯ должен написать свой собственный сценарий. Вы можете инициировать выполнение одной и той же работы с другими параметрами или другую работу с некоторыми параметрами стандартными способами, которые поддерживает jenkins (например, с помощью curl)

Еще одна альтернатива - плагин поиска текста Jenkins:

https://wiki.jenkins-ci.org/display/JENKINS/Text-finder+Plugin

Это шаг после сборки, который позволяет принудительно пометить сборку какнестабильный» если RegEx найден в тексте консоли (или даже некоторый файл в рабочей области). Итак, на ваших этапах сборки, в зависимости от ваших условий, введите уникальную строку в консольный журнал, а затем выполните RegEx для этой строки. Вы можете использоватьТриггер параметризованных заявок " и установите условие какнестабильный», Это дает дополнительное преимущество визуальной маркировки сборки (желтым шариком), однако у вас есть только 1 условный вариант с этим методом, а из вашего ОП выглядит так, как будто вам нужно 2.

Попробуйте комбинацию этих 2 методов:

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

https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin)

Я думаю, что он может делать то, что тыищу.

 xnickmx31 окт. 2012 г., 22:29
Я должен был добавить его в свой первоначальный список. Нет, этот плагин нетоже не работает. Этот плагин может выполнять только условные шаги сборки, а не условные шаги после сборки.
 seaders23 июл. 2013 г., 17:10
@xnickmx, вы установили и попробовали этот плагин? Хотя было бы лучше, чтобы этот плагин был доступен вшаги после сборкиСложи все свои роликишаги после сборки в этом разделе плагинов, после основной сборки, как если бы это былопосле сборки», Работает отлично для меня.

Ваш ответ на вопрос