如何在Jenkinsfile中设置和引用变量

Dal*_*ney 27 groovy jenkins jenkins-plugins jenkins-pipeline multibranch-pipeline

我有一个用于我的multibranch项目的声明性管道脚本,我想在其中读取一个文本文件并将结果存储为一个字符串变量,以供管道中的后续步骤访问.使用片段生成器我尝试做这样的事情:

filename = readFile 'output.txt'
Run Code Online (Sandbox Code Playgroud)

filename将是我的字符串.

我在Jenkins控制台输出中出错:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 30: Expected a step @ line 30, column 5.
            filename = readFile 'output.txt'
Run Code Online (Sandbox Code Playgroud)

我是否需要使用withEnv步骤将输出设置readFile为Jenkins环境变量?如果是这样,怎么样?

谢谢

Jon*_*n S 44

该错误是由于您只允许在steps指令中使用管道步骤.我知道的一种解决方法是使用script步骤并在其中包装任意管道脚本,并将结果保存在环境变量中,以便以后使用.

所以在你的情况下:

pipeline {
    agent any
    stages {
        stage("foo") {
            steps {
                script {
                    env.FILENAME = readFile 'output.txt'
                }
                echo "${env.FILENAME}"
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 一个提示:你可能想修剪这个`readFile('output.txt').trim()` (3认同)

Ada*_*ink 20

根据文档,如果以后想要在脚本的其他部分使用变量的值,也可以设置全局环境变量.在您的情况下,它将在根管道中设置它:

pipeline {
  ...
  environment {
    FILENAME = readFile ...
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)


Jan*_*sky 10

我们通过向environment步骤添加函数来解决这个问题,即:

environment {
    ENVIRONMENT_NAME = defineEnvironment() 
}
...
def defineEnvironment() {
    def branchName = "${env.BRANCH_NAME}"
    if (branchName == "master") {
        return 'staging'
    }
    else {
        return 'test'
    }
}
Run Code Online (Sandbox Code Playgroud)