Java 如何在詹金斯作业的中间分配一个Env变量
我有一个包含管道的Jenkins文件。我设置了一个参数,可以选择传递,如果没有设置参数,也会设置默认值:Java 如何在詹金斯作业的中间分配一个Env变量,java,jenkins,groovy,jenkins-pipeline,Java,Jenkins,Groovy,Jenkins Pipeline,我有一个包含管道的Jenkins文件。我设置了一个参数,可以选择传递,如果没有设置参数,也会设置默认值: parameters { string(name: 'MY_VAR', defaultValue: 'foo', description: 'my var that can be optional') } 在这些阶段的中间,我想用一些其他值覆盖这个“my_var”(仅在某些时候,并且只有在传递了一些其他特定参数的情况下) 到目前为止,这是可行的: stage('Bu
parameters {
string(name: 'MY_VAR', defaultValue: 'foo', description: 'my var that can be optional')
}
在这些阶段的中间,我想用一些其他值覆盖这个“my_var”(仅在某些时候,并且只有在传递了一些其他特定参数的情况下)
到目前为止,这是可行的:
stage('Build') {
steps {
env.MY_VAR="foobar"
}
}
但我想从文件中读取该变量,所以我想做如下操作:
stage('Build') {
steps {
// Of course none of following work
env.MY_VAR=$(cat /tmp/my-file)
//or
sh "new_var=$(cat /tmp/my-file)"
env.MY_VAR=$new_var
}
}
如何实现这一点?我想您需要使用脚本块。在脚本块中定义变量将允许您在整个管道中使用它们,而不仅仅是在单独的阶段
stage ('Build') {
steps {
script {
env.MY_VAR=sh returnStdout: true, script: """ cat /tmp/my-file """
echo "${env.MY_VAR}"
}
}
}
我想您需要使用脚本块。在脚本块中定义变量将允许您在整个管道中使用它们,而不仅仅是在单独的阶段
stage ('Build') {
steps {
script {
env.MY_VAR=sh returnStdout: true, script: """ cat /tmp/my-file """
echo "${env.MY_VAR}"
}
}
}
实际上,您可以在脚本语句中使用任何groovy库。 例如,可以使用File类读取文本文件:
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
def filePath = "/tmp/my-file"
env.VAR = new File(filePath).text
}
}
}
stage('Test') {
steps {
echo env.VAR
}
}
}
}
实际上,您可以在脚本语句中使用任何groovy库。 例如,可以使用File类读取文本文件:
pipeline {
agent any
stages {
stage('Build') {
steps {
script {
def filePath = "/tmp/my-file"
env.VAR = new File(filePath).text
}
}
}
stage('Test') {
steps {
echo env.VAR
}
}
}
}
这看起来是一个清晰的答案,可能会奏效,但在我的jenkins设置中,我遇到了以下错误:
RejectedAccessException:Scripts不允许使用新的java.io.File java.lang.String
。我没有访问Jenkins设置的权限,但这看起来也是一个干净的解决方案。这看起来是一个干净的答案,可能会起作用,但在我的Jenkins设置中,我遇到了以下错误:RejectedAccessException:Scripts不允许使用新的java.io.File java.lang.String
。我无法访问Jenkins设置,但这看起来也是一个干净的解决方案。