以前asked a question关于如何覆盖环境指令中定义的变量,似乎不可能。
我想在一个阶段设置一个变量,并让其他阶段可以访问它。 在声明性管道中,似乎唯一的方法是在脚本{}块中。
例如,我需要在结账后设置一些变量。因此,在结帐阶段结束时,我有一个脚本{}块来设置这些变量,并且可以在其他阶段访问它们。
这有效,但感觉不对。为了便于阅读,我更倾向于在管道顶部声明这些变量并将其覆盖。这意味着有一个"设置变量"在一开始阶段用一个脚本{}块来定义变量 - 这很难看。
我很确定我在这里错过了一个明显的功能。声明性管道是否具有全局变量功能,或者我必须使用脚本{}
答案 0 :(得分:9)
这一切正常,
git push heroku masterbranch
答案 1 :(得分:7)
与@mkobit一样,您可以将变量定义为管道块之外的全局级别。你试过了吗?
def my_var
pipeline {
agent any
stages {
stage('Example') {
steps {
my_var = 'value1'
}
}
stage('Example2') {
steps {
printl(my_var)
}
}
}
}
答案 2 :(得分:0)
对于字符串,将其添加到“环境”块中:
pipeline {
environment {
myGlobalValue = 'foo'
}
}
但是对于非字符串变量,我发现的用于声明式管道的最简单解决方案是将值包装在方法中。
示例:
pipeline {
// Now I can reference myGlobalValue() in my pipeline.
...
}
def myGlobalValue() {
return ['A', 'list', 'of', 'values']
// I can also reference myGlobalValue() in other methods below
def myGlobalSet() {
return myGlobalValue().toSet()
}
答案 3 :(得分:0)
@Sameera的回答对大多数用例来说都是好的。我在附加运算符+=
时遇到问题。因此,不起作用了(MissingPropertyException
:
def globalvar = ""
pipeline {
stages {
stage("whatever) {
steps {
script {
globalvar += "x"
}
}
}
}
}
但这没有有效:
globalvar = ""
pipeline {
stages {
stage("whatever) {
steps {
script {
globalvar += "x"
}
}
}
}
}
答案 4 :(得分:0)
这对我有用
pipeline {
agent any
stages {
stage('Example') {
steps {
script{
env.my_var = 'value1'
}
}
}
stage('Example2') {
steps {
printl(my_var)
}
}
}
}