В настоящее время я тестирую конвейерный подход Jenkins 2.0, чтобы узнать, работает ли он для среды сборки, которую я использую.
Сначала о самой окружающей среде. В настоящее время он состоит из нескольких репозиториев SCM. Каждый репозиторий содержит несколько ветвей для разных этапов разработки, и каждая ветка построена с несколькими конфигурациями. Не все конфигурации применяются к каждому репозиторию.
В настоящее время каждый репозиторий/ветвь настроен как Матричный проект для разных конфигураций. Каждый проект предоставляет результаты построения в качестве артефакта, и эти артефакты используются в последующих проектах.
Различные репозитории зависят друг от друга, поэтому успешная сборка над поставленной задачей запускает некоторые конкретные задания потока вниз. В настоящее время все, что работает, но объем работы, необходимый для настройки нового ветки или для настройки процесса строительства, очень много, так как многие различные проекты должны быть изменены вручную.
Теперь я хотел попробовать попробовать новые конвейеры. Моя идея заключалась в создании многоотводных проектов трубопроводов и размещении Jenkinsfile
внутри репозитория, содержащего инструкции для сборки.
Основная проблема заключается в том, что сборки инициируют друг друга, потому что в основном сборка в определенной ветки восходящего потока должна запускать ветвь вниз по течению. Как бы то ни было, информация о том, какие дочерние подразделения должны запускаться, не известна в рамках проекта по разведке. Каждый нисходящий проект извлекает артефакты из некоторых ветвей вверх по течению, и идеальным решением было бы, если бы последующая сборка была бы запущена в случае, если восходящая сборка, являющаяся источником для артефакта, завершает сборку.
Проблема заключается только в том, что нисходящие проекты действительно знают, какие артефакты они требуют. Названия веток вряд ли совпадают в большинстве случаев, и это очень затрудняет запуск сборок из восходящего проекта.
В настоящее время это решается с помощью ReverseBuildTrigger
. Но эта вещь перестает работать, как только она приближается к конвейеру.
Я действительно в недоумении, как это сделать. Есть ли способ получить что-то вроде ReverseBuildTrigger
, работающий внутри сценариев конвейера?
Также запускается вся нисходящая сборка для всех ветвей в случае, если изменен один ветвь вверх по потоку, не является вариантом. Это создало бы слишком много равных сборок.