Дженкинс: Триггерный многодиапазонный конвейер при изменении по течению

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

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

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

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

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

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

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

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

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

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

Ответ 1

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

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

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

Однако до сих пор сборки "some_project" по-прежнему не запускают нисходящий поток как ожидалось.

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

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

Ответ 2

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

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)
}

Ответ 3

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

К сожалению, обратный запуск недоступен. Ближе всего вы можете перейти к обратному запуску, используя Плагин Promoted Builds. Но он по-прежнему не позволяет настроить настройку для каждой ветки.

Дополнительно генератор сниппетов уточняет:

Внутри трубопровода script в настоящее время недоступны следующие переменные:

NODE_LABELS РАБОЧЕЕ ПРОСТРАНСТВО SCM-специфичные переменные, такие как SVN_REVISION

пс. Может быть, единственный способ - запросить от восходящего потока вниз по течению.