如何在jenkins作业中分配env变量

n3h0vuf2  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(234)

我有一个包含管道的jenkins文件。我已经设置了一个可选的参数来传递,如果没有设置参数,也会设置一个默认值:

parameters {
    string(name: 'MY_VAR', defaultValue: 'foo', description: 'my var that can be optional')
}

在这些阶段的中间,我想用一些其他值覆盖(仅在某些时候,并且仅在传递了一些其他特定参数的情况下)这个“my\u 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 
            }
        }

我怎样才能做到这一点?

ego6inou

ego6inou1#

实际上,您可以在script语句中使用任何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
            }
        }
    }
}
sqougxex

sqougxex2#

我想你需要使用脚本块。在脚本块中定义变量将允许您在整个管道中使用它们,而不仅仅是在单独的阶段。

stage ('Build') {
  steps {
    script {
      env.MY_VAR=sh returnStdout: true, script: """ cat /tmp/my-file """
      echo "${env.MY_VAR}"
    }
  }
}

相关问题