Jenkins CI / CD - храните Jenkinsfile в отдельном хранилище, которое я хочу создать - PullRequest
1 голос
/ 17 января 2020

У меня есть приложение SpringBoot API, которое настроено в конвейере Jenkins для CI / CD. Процесс определяется с использованием Jenkinsfile, который в настоящее время находится в root исходного репо. Теперь есть требование переместить этот Jenkinsfile в отдельное репо из исходного репо. Вот изображение текущих настроек SCM и Конфигурации сборки моего конвейера.

enter image description here

Обратите внимание, что раскрывающийся список Mode в конфигурации Build Configuration предоставлять только опцию "by Jenkinsfile". Как мне этого добиться? Любые ответы, идеи или предложения будут высоко оценены.

Обратите внимание, что я новичок в конфигурациях Jenkins. Следовательно, очень важно, если кто-то может помочь с фрагментом кода или суть с примерами.

Спасибо

Ответы [ 3 ]

1 голос
/ 17 января 2020

Все, что вам нужно сделать, это создать новый репозиторий, содержащий Jenkinsfile. Затем вы должны изменить свою работу, чтобы получить Jenkinsfile из нового репозитория.

Затем вам нужно отредактировать ваш конвейер, чтобы получить источники из старого репозитория, где источники:

checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], gitTool: 'Default', submoduleCfg: [], userRemoteConfigs: [[url: 'ssh://git@git-pull-url']]])

Вы можете сгенерировать этот код здесь:

<your.jenkins.url>/jenkins/job/<your-pipeline-job>/pipeline-syntax/

и затем выберите checkout: Check out from version control в качестве шага образца.

1 голос
/ 17 января 2020

Вы можете установить URL репозитория для Jenkinsfile в Advanced Project Options -> Pipeline -> Definition -> SCM -> Repositories -> Repository URL. Вы можете указать другое хранилище здесь.

0 голосов
/ 26 февраля 2020

Я нашел способ отделить конвейер Jenkins от Jenkinsfile и передать спецификации проекта c params из Jenkisfile

Затем Jenkinsfile выглядел следующим образом:

#!groovy

def args = [
        appName: 'app-name',
        appSpace: 'app-space',
        jenkinsSlavelabel: 'jenkinsSlavelabel'
]

node('jenkinsSlaveLabel') {
    deleteDir()

    checkout scm

    def jenkinsBuilder = fileLoader.fromGit('groovy-file-name.groovy', 'git-url', 'branch-filter', 'git-repo-credentials-id', 'jenkinsSlavelabel')
    jenkinsBuilder(args)
}
...