以前,关于如何重写环境指令中定义的变量的asked a question似乎是不可能的。
我想在一个阶段中设置一个变量,并让其他阶段可以访问它。在声明式管道中,似乎唯一的方法是在script{}块中完成此操作。
例如,我需要在结帐后设置一些变量。因此,在结帐阶段结束时,我有一个脚本{}块来设置这些变量,它们可以在其他阶段中访问。
这行得通,但感觉不对。出于可读性的考虑,我更喜欢在管道的顶部声明这些变量,并覆盖它们。因此,这意味着在一开始就有一个“设置变量”阶段,其中包含一个只定义变量的script{}块--这很难看。
我很确定我在这里遗漏了一个明显的特性。声明性管道是否具有全局变量功能,还是必须使用脚本{}
发布于 2017-12-12 17:34:59
就像@mkobit所说的,你可以在流水线块之外将变量定义到全局级别。你试过吗?
def my_var
pipeline {
agent any
stages {
stage('Example') {
steps {
my_var = 'value1'
}
}
stage('Example2') {
steps {
printl(my_var)
}
}
}
}
发布于 2018-07-04 20:16:04
这是没有错误的工作,
def my_var
pipeline {
agent any
environment {
REVISION = ""
}
stages {
stage('Example') {
steps {
script{
my_var = 'value1'
}
}
}
stage('Example2') {
steps {
script{
echo "$my_var"
}
}
}
}
}
发布于 2019-05-16 07:01:50
对于字符串,将其添加到'environment‘块中:
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()
}
https://stackoverflow.com/questions/47716933
复制相似问题