@ Похоже, что Lazy не возвращает значение при первом вызове в конвейере Jenkins.Есть идеи, почему?
Код:
class JenkinsStatus implements Serializable {
def pipeline
@Lazy String author = {
this.pipeline.echo "Call to Author"
def commit = this.pipeline.sh(returnStdout: true, script: 'git rev-parse HEAD')
def a = this.pipeline.sh(returnStdout: true, script: "git --no-pager show -s --format='%an' ${commit}").trim()
this.pipeline.echo("inside Author is: ${a}")
a
}()
}
pipeline {
agent any
stages {
stage( "Checkout repo") {
steps {
// SCM checkout() here.
}
}
}
post {
always {
script {
JenkinsStatus jstatus = [
pipeline: this
]
echo "Author1: ${jstatus.author}"
echo "Author2: ${jstatus.author}"
}
}
}
}
Когда я запускаю конвейер, я получаю следующие результаты:
Call to Author
[Pipeline] sh
+ git rev-parse HEAD
[Pipeline] sh
+ git --no-pager show -s --format=%an 9242efd51b83b4202863a04ac0b3c45c256a3948
[Pipeline] echo
inside Author is: <edit out>
[Pipeline] echo
Author1: null
[Pipeline] echo
Author2: <edit out>
Вы можете ясно видеть a
определено.Это возвращение.Но JenkinsStatus.author фактически не применяется до второго вызова.