我在 Jenkins 声明性管道的阶段上设置锁定时遇到问题。 我想在锁中使用我仅在运行时知道的环境变量(由前一阶段设置)。 如果我只是在锁名称中使用 ${env.myvar} ,它会显示“null”。
这是我到目前为止所做的(我尝试尽可能简化管道,因为它很大,但我保留了有意义的部分):
import hudson.console.*
pipeline {
agent none
stages {
stage('Init') {
stages{
stage('init_1') {
steps {
script {
env.MYVAR = "value"
}
}
}
stage('init_2') {
steps {
print("${env.MYVAR}")
}
// other init stuff
}
}
}
stage('run') {
agent any
options {
lock resource: "${env.MYVAR}"
}
stages {
stage('actually do stuff') {
steps {
print("${env.MYVAR}")
}
}
}
}
}
}
该脚本的输出是:
10:30:47 [Pipeline] Start of Pipeline
10:30:47 [Pipeline] stage
10:30:47 [Pipeline] { (Init)
10:30:47 [Pipeline] stage
10:30:47 [Pipeline] { (init_1)
10:30:47 [Pipeline] script
10:30:47 [Pipeline] {
10:30:47 [Pipeline] }
10:30:47 [Pipeline] // script
10:30:47 [Pipeline] }
10:30:47 [Pipeline] // stage
10:30:47 [Pipeline] stage
10:30:47 [Pipeline] { (init_2)
10:30:47 [Pipeline] echo
10:30:47 value
10:30:47 [Pipeline] }
10:30:47 [Pipeline] // stage
10:30:47 [Pipeline] }
10:30:47 [Pipeline] // stage
10:30:47 [Pipeline] stage
10:30:47 [Pipeline] { (run)
10:30:47 [Pipeline] lock
10:30:47 Trying to acquire lock on [null]
10:30:47 Resource [null] did not exist. Created.
10:30:47 Lock acquired on [null]
10:30:47 [Pipeline] {
10:30:48 [Pipeline] node
10:30:48 Running on Jenkins in /var/jenkins_home/workspace/Pipeline for tests
10:30:48 [Pipeline] {
10:30:48 [Pipeline] stage
10:30:48 [Pipeline] { (actually do stuff)
10:30:48 [Pipeline] echo
10:30:48 value
10:30:48 [Pipeline] }
10:30:48 [Pipeline] // stage
10:30:48 [Pipeline] }
10:30:48 [Pipeline] // node
10:30:48 [Pipeline] }
10:30:48 Lock released on resource [null]
10:30:48 [Pipeline] // lock
10:30:48 [Pipeline] }
10:30:48 [Pipeline] // stage
10:30:48 [Pipeline] End of Pipeline
10:30:48 Finished: SUCCESS
尝试使用 Groovy 变量来代替:
// Jenkinsfile
def myvar
pipeline {
agent none
stages {
stage('Init') {
stages{
stage('init_1') {
steps {
script {
myvar = "value"
}
}
}
stage('init_2') {
steps {
print("${myvar}")
}
// other init stuff
}
}
}
stage('run') {
agent any
options {
lock resource: "${myvar}"
}
stages {
stage('actually do stuff') {
steps {
print("${myvar}")
}
}
}
}
}
}