Дженкинс: запускать конвейер с несколькими ветвями при изменении восходящего потока

В настоящее время я тестирую конвейерный подход Jenkins 2.0, чтобы убедиться, что он работает в среде сборки, которую я использую.

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

В настоящее время каждый репозиторий / ветка настроен как матрица Project для разных конфигураций. Каждый проект представляет результаты своего строительства как артефакт, и эти артефакты используются в последующих проектах.

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

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

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

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

В настоящее время это решается с помощью ReverseBuildTrigger. Но эта штука перестает работать, как только приближается к трубопроводу.

Я действительно не понимаю, как заставить это работать. Есть ли способ получить что-то вроде _3 _ работа внутри скриптов конвейера?

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


person Nitram    schedule 24.04.2016    source источник
comment
Какой тип SCM вы используете?   -  person luka5z    schedule 24.04.2016
comment
@ luka5z Не должно быть актуальным. Но это SVN.   -  person Nitram    schedule 24.04.2016


Ответы (3)


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

properties([
    pipelineTriggers([
        triggers: [
            [
                $class: 'jenkins.triggers.ReverseBuildTrigger',
                upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS
            ]
        ]
    ]),
])

Это, по крайней мере, заставляет Дженкинса признать, что он должен срабатывать, когда создается 'some_project', т.е. он появляется на странице «Просмотр конфигурации».

Однако пока сборки some_project все еще не запускают последующий проект, как ожидалось.

При этом, может быть, вам повезет больше. Дайте мне знать, если это сработает для вас.

(Кто-то еще задал аналогичный вопрос Многопоточный конвейер Jenkins и указав восходящий поток проекты)

person cscutcher    schedule 31.08.2016
comment
Абсолютно правильно. Новая версия плагина вакансий, начиная с версии 2.4 плагина Pipeline: Job, теперь поддерживает этот вариант использования. Уже пользуюсь. - person Nitram; 31.08.2016
comment
У меня отлично работает, большое спасибо за публикацию! Кстати, мне пришлось включить SUCCESS staticField в меню In-process Script Approval в Manage Jenkins, но после этого все заработало безупречно. Спасибо! - person jvperrin; 31.10.2016

Если вы используете декларативный многоэлементный конвейер, вы можете использовать:

triggers {
  upstream(upstreamProjects: "some_project/some_branch", threshold: hudson.model.Result.SUCCESS)
}

Если вы хотите, чтобы соответствие ветвей происходило между зависимостями, вы можете использовать:

triggers {
  upstream(upstreamProjects: "some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F"), threshold: hudson.model.Result.SUCCESS)
}
person Japster24    schedule 09.05.2017
comment
синтаксис для нескольких исходных проектов выглядит следующим образом (upstreamProjects: some_project / some_branch, other_project / other_branch, ...) только проекты, объединенные в одну строку, разделенную запятой в соответствии с jenkins.io/doc/book/pipeline/syntax/#triggers - person ; 13.12.2019

Конфигурация Pipeline Job по-прежнему изначально поддерживает триггеры сборки , включая триггер обратной сборки, Сборка после сборки других проектов. Вы даже можете указать ответвление от проекта Pipeline Multi-branch.

К сожалению, обратный запуск недоступен для заданий Pipeline Multi-branch. Наиболее близким к обратному срабатыванию является использование подключаемого модуля для продвигаемых сборок. Но он по-прежнему не позволяет настраивать настройку для каждой ветви.

Кроме того, Генератор фрагментов поясняет:

Следующие переменные в настоящее время недоступны внутри скрипта конвейера:

NODE_LABELS WORKSPACE Переменные, специфичные для SCM, такие как SVN_REVISION

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

person luka5z    schedule 24.04.2016
comment
Это правильно. Как бы то ни было, я ищу решение для заданий с несколькими ветвями конвейера и, в лучшем случае, для решения, которое можно настроить с помощью сценария конвейера. - person Nitram; 25.04.2016
comment
@Nitram, вы в конечном итоге получили триггеры для восходящего потока, которые работают для ваших многоотраслевых трубопроводных проектов? У меня такие же потребности в цепочке заданий, как и у вас, и triggers { upstream() } у меня не работает, используя Jenkins 2.249.2, Pipeline: Multibranch v2.22, Pipeline v2.6, Pipeline: Job v2.4. - person timblaktu; 03.02.2021
comment
@timblaktu Я все еще использую этот чехол, и триггер upstream() уже работает нормально. Единственное, на что вам нужно обратить внимание, это то, что вам нужно заменить / на %2F, если вы хотите ссылаться на ветвь, содержащую косые черты. И /, кроме тех, что указаны в названии ветки, не подлежат замене. - person Nitram; 05.02.2021