Разделение трубопровода Jenkins - PullRequest
0 голосов
/ 28 января 2020

У нас есть несколько конвейерных заданий jenkins с такими шагами, как:

  1. Сборка -> модульные тесты -> pu sh до артефакта
  2. Сборка -> модульные тесты - > deploy
  3. Build -> unit-тесты -> интеграционные тесты

et c.

Руководство хочет объединить все это в один большой конвейер и в настоящее время у моей команды есть 2 подхода, как это сделать:

a) Создать работу по конвейеру с большой задницей со всеми этапами внутри

Недостатки в том, что нам не нужно развертывать или опубликуйте sh в артефакте для каждой отдельной сборки, так что внутри будут некоторые операторы if, которые при необходимости пропустят этапы - что сделает историю сборок полным беспорядком - потому что одна сборка может делать что-то отличное от другой (например, сборка # 1 publi sh binaries, и build # 2 запустить интеграционные тесты). Плюсы в том, что у нас все в одном рабочем пространстве и jenkinsfile.

b) Создайте отдельную работу для каждой единицы задачи.

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


Не могли бы вы указать, если бы вы go с помощью a или b, или как иначе вы бы сделали это вместо этого?

Ответы [ 2 ]

0 голосов
/ 28 января 2020

У нас есть один «конвейер с большой задницей», приправленный

        stage('Push') {
        when {
            expression { env.PUSH_TO_ARTIFACTORY }
            beforeAgent true
        }
        steps {

et c.

Что касается истории, вы можете изменить описание сборки, поэтому для сборок, которые пу sh Вы можете добавить символ * в конце, например,

    def is_push = env.PUSH_TO_ARTIFACTORY ? " *" : ""
    currentBuild.displayName += "${is_push}"

Наличие всего в одном файле означает, что вам не нужно выяснять, какой файл смотреть, когда вы исправляете вещи.

0 голосов
/ 28 января 2020

Если причиной их объединения является повторение кода, посмотрите разделяемые библиотеки . Ваши Build и unit-tests, которые являются общими для всех конвейеров, могут go в общую библиотеку, и вы можете просто вызывать код библиотеки из разных конвейеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...