如何在詹金斯工作中分配一个环境变量
How to assign a an env variable in the middle of a jenkins job
我有一个包含管道的 Jenkinsfile。我已经设置了一个参数,可以选择传递,如果没有设置参数,也会设置一个默认值:
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}"
}
}
}
您实际上可以在脚本语句中使用任何 groovy 库。
例如,您可以使用文件 class 来读取文本文件:
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
}
}
}
}
我有一个包含管道的 Jenkinsfile。我已经设置了一个参数,可以选择传递,如果没有设置参数,也会设置一个默认值:
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}"
}
}
}
您实际上可以在脚本语句中使用任何 groovy 库。 例如,您可以使用文件 class 来读取文本文件:
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
}
}
}
}