Вызов закрытия из библиотеки jenkins внутри конвейера задания - PullRequest
1 голос
/ 22 января 2020

У меня есть jenkins_library с handleCheckout. groovy, который обрабатывает извлечение:

def handleCheckout = {
    if (env.gitlabMergeRequestId) {
        sh "echo 'Merge request detected. Merging...'"
        checkout([
                $class           : 'GitSCM',
                branches         : [[name: "${env.gitlabSourceNamespace}/${env.gitlabSourceBranch}"]],
                extensions       : [
                        [$class: 'PruneStaleBranch'],
                        [$class: 'CleanCheckout'],
                        [
                                $class : 'PreBuildMerge',
                                options: [
                                        fastForwardMode: 'NO_FF',
                                        mergeRemote    : env.gitlabTargetNamespace,
                                        mergeTarget    : env.gitlabTargetBranch
                                ]
                        ]
                ],
                userRemoteConfigs: [
                        [
                                credentialsId: env.CREDENTIALS_ID,
                                name         : env.gitlabTargetNamespace,
                                url          : env.gitlabTargetRepoSshURL
                        ],
                        [
                                credentialsId: env.CREDENTIALS_ID,
                                name         : env.gitlabSourceNamespace,
                                url          : env.gitlabSourceRepoSshURL
                        ]
                ]
        ])

    } else {
        sh "echo 'No merge request detected. Checking out current branch'"
        checkout([
                $class           : 'GitSCM',
                branches         : [[name: "${env.sourceBranch}"]],
                extensions       : [
                        [$class: 'PruneStaleBranch'],
                        [$class: 'CleanCheckout']
                ],
                userRemoteConfigs: [[credentialsId: env.CREDENTIALS_ID, url: env.GIT_URL]]
        ])
    }
}

Я пытаюсь вызвать его из конвейера после импорта библиотеки jenkins следующим образом:

@Library('jenkins-util-lib') _

 stage('prepare') {
            sh "env | sort"
            handleCheckout()

Это заканчивается ошибкой:

No signature of method: handleCheckout.call() is applicable for argument types: () values: []
Possible solutions: wait(), any(), wait(long), main([Ljava.lang.String;), any(groovy.lang.Closure), each(groovy.lang.Closure)

Хорошо работает, пока метод объявлен и вызван внутри конвейера.

1 Ответ

2 голосов
/ 22 января 2020

Не могли бы вы настроить

1) handleCheckout. groovy должен находиться в папке vars (необходимо проверить) 2) handleCheckout. groovy должен иметь def call (необходимо изменить) 3) Внутри вашего конвейера вы должны запустить Jenkinsfilename (), в вашем случае handleCheckout

На всякий случай выполните c - https://jenkins.io/doc/book/pipeline/shared-libraries/

Таким образом, в и вы должны изменить имя процедуры на def call и проверить расположение файла Jenkins (должно быть в папке vars внутри разделяемой библиотеки)

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