gpt4 book ai didi

jenkins - 如何从 jenkins Powershell 脚本更新 Env vars

转载 作者:行者123 更新时间:2023-12-05 01:35:15 25 4
gpt4 key购买 nike

你好尝试从阶段中编写的 Powershell 脚本更新 jenkins Env 变量

pipeline {
agent { label 'master' }
environment {
def var1 = "default_value"
def var2 = "default var 2"
}
stages {
stage ('step-1') {
steps {
script {
powershell (returnStdout: true, script: '''
${env:var1} = "changed from powershell"
${env:var2} = "var2 changed from powershell"
''').trim()
}
}
}
stage ("step-2"){
steps {
echo var1
echo var2
}
}
}
}

我可以访问值但不能更改值,范围是否仅限于 Powershell?

最佳答案

按照设计,子 shell 不能修改其父 shell 的环境。在 Jenkinsfile 中调用的每个 powershellshbat 步骤都会生成一个新的子 shell 来运行子进程。因此,一旦子进程结束,这些步骤中声明的任何环境变量都会丢失,并且对管道 Groovy 脚本不可用。

目前在 Jenkinsfile 中执行此操作的一种方法是将子 shell 的 stdout 分配给 Groovy 脚本本身中的变量。

script {
env.var1 = powershell(returnStdout: true, script: '<single command>').trim()
}

显然,这种方法有严重的局限性,因为您一次只能运行一个命令,而且只有当它会返回适当的输出以用作变量时。

另一种方法是将值写入文件,然后使用 Groovy 脚本读取这些值以设置管道下游的环境变量。

编辑

根据您的评论,如果您的 stdout 返回两个不同的值作为字符串,您可以尝试将它们解析为单独的值。例如:

script {
def output = powershell(returnStdout: true, script: '''
<command1>
<command2>
''')
println(output)
/*Prints:
value1
value2
*/
env.var1 = output.tokenize('\n')[0].trim() \\value1
env.var2 = output.tokenize('\n')[1].trim() \\value2
}

关于jenkins - 如何从 jenkins Powershell 脚本更新 Env vars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63138490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com