Конвейер Jenkins: загрузить свойства из файла - PullRequest
0 голосов
/ 27 апреля 2018

Ниже кодов трубопровода работает хорошо:

pipeline {
    agent {
        label "test_agent"
    }

    stages {
        stage("test") {

            steps {
                script {
                    sh "echo 'number=${BUILD_NUMBER}' >log"

                    if (fileExists('log')) {
                        load 'log'
                        retVal = "${number}"

                    }
                    echo "${retVal}"
                }
            }
        }

    }
}

Однако, когда я попытался поместить логику чтения файла в библиотеку (с именем getNumber.groovy) и вызвать ее в конвейере, например:

getNumber.groovy
def call() {
    def retVal
    if (fileExists('log')) {
        load 'log'
        retVal = "${number}"

    }
    return retVal
}

Вот как конвейер (test.groovy) вызывает эту библиотеку:

@Library('lib') _
pipeline {
    agent {
        label "test_agent"
    }

    stages {
        stage("test") {

            steps {
                script {
                    sh "echo 'number=${BUILD_NUMBER}' >log"

                    def retVal = getNumber()

                    echo "${retVal}"
                }
            }
        }

    }
}

Это всегда происходит с ошибкой ниже:

        [Pipeline] End of Pipeline
    groovy.lang.MissingPropertyException: No such property: number for class: getNumber
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53)
        at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)
        at com.cloudbees.groovy.cps.sandbox.DefaultInvoker.getProperty(DefaultInvoker.java:34)
        at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)

Есть предложения? Как это исправить, если я хочу инкапсулировать логику в lib?

[Изменить] Если я изменю этот сегмент

                    load 'log'
                    retVal = "${number}"

к этому:

    def matcher = readFile('log') =~ '^number=(.+)'
    retVal=matcher ? matcher[0][1] : null

это работает. Но мне просто любопытно, почему предыдущий не может работать.

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