我正在编写一个Jenkins声明性管道脚本,其中包含Powershell脚本。当我尝试在Powershell中获取环境变量的值时,我得到的是environment
块中定义的“原始”值,而不是前一个阶段中设置的值。 withEnv
块也不起作用。示例:
pipeline {
agent any
environment { TEST_ENV_VAR = "0" }
stages {
stage('stage1') {
failFast true
parallel {
stage('stage1.1') {
steps {
script {
TEST_ENV_VAR = "1"
}
}
}
}
}
stage('stage2') {
failFast true
parallel {
stage('stage2.1') {
steps {
echo "$TEST_ENV_VAR" // prints "1"
withEnv(["inv_var = $TEST_ENV_VAR"]) {
withCredentials([usernamePassword(credentialsId: "$CredentialsID", passwordVariable: 'password', usernameVariable: 'srvUser')]) {
echo "$TEST_ENV_VAR" // prints "1"
echo "$env.inv_var" // prints "null"
powershell label: 'pshell', returnStatus: true, script: '''
echo "$env:TEST_ENV_VAR" # prints "0"
echo "$env:inv_var" # prints nothing
'''
}
}
}
}
}
}
}
}
答案 0 :(得分:1)
这是一个非常简单的答案,但令人难过的是,俗套并没有多大帮助。在withEnv内,变量和等号之间不能有空格。这是删除了凭据的代码(因为我没有凭据),唯一的变化是删除了两个空格
pipeline {
agent any
environment { TEST_ENV_VAR = "0" }
stages {
stage('stage1') {
failFast true
parallel {
stage('stage1.1') {
steps {
script {
TEST_ENV_VAR = "1"
}
}
}
}
}
stage('stage2') {
failFast true
parallel {
stage('stage2.1') {
steps {
echo "$TEST_ENV_VAR" // prints "1"
withEnv(["inv_var=$TEST_ENV_VAR"]) {
echo "$TEST_ENV_VAR" // prints "1"
echo "$env.inv_var" // now prints "1"
powershell label: 'pshell', returnStatus: true, script: '''
echo "$env:TEST_ENV_VAR" # prints "0"
echo "$env:inv_var" # now prints "1"
'''
}
}
}
}
}
}
}