Где хранить Jenkinsfile для нисходящего конвейера без собственного репо

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

На данный момент у нас есть следующая настройка конвейера:

  • repo A / Jenkinsfile - Pipeline A - сборка, запуск модульных тестов и создание артефактов
  • репо B / Jenkinsfile - конвейер B - сборка, запуск модульных тестов и создание артефактов

Каждый раз, когда конвейер A или B завершается, я хочу запустить конвейер C.

  • Конвейер C должен взять артефакты последних конвейеров A и B, упаковать их вместе как образ докера, запустить интеграционные тесты, развернуть в промежуточной среде.

Где мне хранить Jenkinsfile для конвейера C, поскольку у него нет собственного репозитория исходного кода?

Для меня это логически выглядит как отдельный конвейер, который находится ниже по течению от A и B, поэтому предположим, что он принадлежит отдельному Jenkinsfile, но тогда где это будет в системе управления версиями. Чтобы уточнить, я хотел бы, чтобы все мои файлы конвейера находились под контролем источника.

В качестве альтернативы, следует ли мне попытаться определить весь конвейер (включая интеграцию и т. д.) только в одном из родительских конвейеров, пропуская часть сборки, когда она запускается из другого конвейера? Оставив другой как простую сборку. Например

  • Трубопровод А (полный трубопровод)

    • build
    • модульные тесты
    • артефакт
    • (получить последний артефакт B)
    • интеграционный тест
    • развернуть на постановку
  • Конвейер B (простая сборка, которая затем использует полный конвейер)

    • build
    • модульные тесты
    • артефакт
    • запускать конвейер A, пропуская все до этапа интеграционного тестирования (возможно, с использованием when блоков на тех этапах, которые смотрят на триггер сборки?)

Я могу найти ресурсы по созданию или запуску одного конвейера из другого следующим образом: https://metamorphant.de/blog/posts/2019-03-11-jenkins-101-downstream-projects/, но нет информации о структурировании вышеупомянутых зависимостей и конвейеров в Jenkins Pipeline. .


person Chris R    schedule 31.10.2019    source источник
comment
Конвейер C может находиться в любом из репозиториев, вам просто нужно указать на этот Jenkinsfile в конфигурации вашего задания C.   -  person Dibakar Aditya    schedule 31.10.2019
comment
@DibakarAditya, вот что я собираюсь попробовать. Я не уверен на 100%, что это логичное место для этого, однако это кажется лучше, чем создание нового репо / проекта только для хранения одного файла Pipeline C. Может быть, когда у меня будет полный набор интеграционных тестов, я объединю их и файл Pipeline C в репозиторий.   -  person Chris R    schedule 06.11.2019


Ответы (1)


Когда вы определяете «новый элемент» в Jenkins и выбираете тип проекта «Конвейер», вы получаете форму, когда для конвейера по умолчанию задано «Скрипт конвейера». Если у вас есть Jenkinsfile, вы переключаетесь на использование «Pipeline script from SCM» и настраиваете его так, чтобы он указывал на GIT-расположение Jenkinsfile, но если вы оставите его как «Pipeline script» по умолчанию, вы можете поместить содержимое конвейер внутри формы, и он будет сохранен в файле config.xml задания без необходимости сохранять его в системе управления версиями.

person yorammi    schedule 05.11.2019
comment
Вы правы, это решит проблему, но ваш ответ заставил меня понять, что я не заявлял, что хочу, чтобы все мои файлы конвейера находились под контролем версий. Я отредактировал свой ответ, чтобы прямо заявить об этом. - person Chris R; 06.11.2019