如何在詹金斯工作中分配一个环境变量

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
            }
        }
    }
}