Шаг библиотеки Дженкинса завершается неудачно, если не заключен в сценарий - PullRequest
0 голосов
/ 17 мая 2018

У меня странная проблема, которую я не могу понять. Я написал пользовательский step, который принимает параметры, используемые для более легкого клонирования репозиториев github / bitbucket. step работает просто отлично - он вызывает соответствующие checkout() для branches и pr с, но по какой-то причине это работает, только если вы вызываете его из script { gitUtils.cloneRepo(...) }. Он не работает в декларативном конвейере, если вы не заключите его в script { } с очень странным исключением:

WorkflowScript: 25: Expected a symbol @ line 25, column 17.
               gitUtils().getCredentials(repo)
               ^

WorkflowScript: 26: Expected a symbol @ line 26, column 17.
               gitUtils().cloneRepo(url: repo)
               ^

WorkflowScript: 27: Expected a symbol @ line 27, column 17.
               gitUtils().getRevision()
               ^

WorkflowScript: 26: Invalid parameter "url", did you mean "message"? @ line 26, column 38.
               gitUtils().cloneRepo(url: repo)
                                    ^

WorkflowScript: 27: Missing required parameter: "message" @ line 27, column 17.
               gitUtils().getRevision()

Есть идеи, почему это происходит?

import java.lang.IllegalArgumentException

def call() {
    return this
}

def cloneRepo(Map parameters = [url: null, branch: "master", credentials: null]) {
    def url = parameters.getOrDefault("url", null)
    def branch = parameters.getOrDefault("branch", "master")
    def credentials = parameters.getOrDefault("credentials", null)

    script {
        if(!url) {
            throw new IllegalArgumentException("cloneRepo() expects url argument to be present!")
        }

        if(credentials == null) {
            credentials = getCredentials(url)
        }

        if (branch.matches("\\d+") || branch.matches("PR-\\d+")) {
            if (branch.matches("PR-\\d+")) {
                branch = branch.substring(3)
            }
            checkout changelog: false, poll: false, scm: [
                    $class: 'GitSCM',
                    branches: [[name: 'pr/' + branch]],
                    doGenerateSubmoduleConfigurations: false,
                    extensions: [[$class: 'LocalBranch', localBranch: 'pr/' + branch]],
                    submoduleCfg: [],
                    userRemoteConfigs: [[
                                                credentialsId: credentials,
                                                refspec: 'refs/pull/' + branch + '/head:pr/' + branch,
                                                url: url
                                        ]]
            ]
        } else {
            checkout changelog: false, poll: false, scm: [
                    $class: 'GitSCM',
                    branches: [[name: branch]],
                    doGenerateSubmoduleConfigurations: false,
                    extensions: [],
                    submoduleCfg: [],
                    userRemoteConfigs: [[
                                                credentialsId: credentials,
                                                url: url
                                        ]]
            ]
        }
    }
}

1 Ответ

0 голосов
/ 17 мая 2018

Шаг script{} принимает блок сценариев конвейера (который содержит функциональные возможности, предоставляемые языком Groovy) и выполняет его в декларативном конвейере.

Поскольку gitUtils.cloneRepo(...) является блоком конвейерного сценария, вам необходимо использовать script{}, чтобы его можно было внедрить в шаг декларативного конвейера.

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