Как сделать конвейер Jenkins, запущенный по запросу, для создания всех репозиториев в проекте Github - PullRequest
0 голосов
/ 17 октября 2019

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

Я приложил эту диаграмму , чтобы внести ясность в мою проблему.

Итак, цель заключается в том, чтобы сделать запрос на извлечение в Branch 3 из Репозиторий 1 запущен конвейер, который строит эту ветку и все остальные репозитории в указанном порядке, то есть Репозиторий 2 , Репозиторий 3 и т. Д. Рабочий проект .

Ваша помощь будет высоко оценена, и я думаю, что решение для этого очень поможет сообществу CI DevOps. Спасибо!

1 Ответ

1 голос
/ 17 октября 2019

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

Первое, что вы хотите сделать, это иметь согласованный Jenkinsfile для каждого из репозиториев. Теперь вы можете сделать это различными способами, но один из способов сделать это - использовать внешние конвейеры Groovy, чтобы логика поддерживалась согласованной для всех репозиториев. Пример этого находится здесь . . Копирование Jenkinsfile через каждое из репозиториев также будет работать, однако лучше использовать один источник правды.

node{
    deleteDir()

    git env.flowScm
    def flow = load 'pipeline.groovy'
    stash includes: '**', name: 'flowFiles'

    stage 'Checkout'
    checkout scm // short hand for checking out the "from scm repository"

    flow.runFlow()
}

Если файл pipe.groovy будет содержать фактический конвейер, будет выглядеть так:

def runFlow() {
    // your pipeline code

} 

// Has to exit with 'return this;' in order to be used as library
return this;

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

node('ATLAS && Linux') {
    dir('CalibrationResults') {
        git url: 'https://github.com/AtlasBID/CalibrationResults.git'
    }
    dir('Combination') {
        git url: 'https://github.com/AtlasBID/Combination.git'
    }
    dir('CombinationBuilder') {
        git url: 'https://github.com/AtlasBID/CombinationBuilder.git'
    }

    sh('ls')
    sh('. CombinationBuilder/build.sh')
}

Соединение двух шагов должно достичь того, что вам нужно в этом случае.

...