red*_*888 8 groovy jenkins jenkins-plugins jenkins-groovy jenkins-pipeline
之前问过一个关于如何覆盖环境指令中定义的变量的问题,似乎这是不可能的.
我想在一个阶段设置一个变量,并让其他阶段可以访问它.在声明性管道中,似乎唯一的方法是在脚本{}块中.
例如,我需要在结账后设置一些变量.因此,在结帐阶段结束时,我有一个脚本{}块,用于设置这些变量,并且可以在其他阶段访问它们.
这有效,但感觉不对.为了便于阅读,我更倾向于在管道顶部声明这些变量并将其覆盖.所以这意味着在一开始就有一个"设置变量"阶段,脚本{}块只定义了变量丑陋.
我很确定我在这里错过了一个明显的特征.声明性管道是否具有全局变量功能,或者我必须使用脚本{}
Vir*_*raj 12
这没有错误,
def my_var
pipeline {
agent any
environment {
REVISION = ""
}
stages {
stage('Example') {
steps {
script{
my_var = 'value1'
}
}
}
stage('Example2') {
steps {
script{
echo "$my_var"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
像@mkobit所说,您可以将变量定义为管道块之外的全局级别.你试过吗?
def my_var
pipeline {
agent any
stages {
stage('Example') {
steps {
my_var = 'value1'
}
}
stage('Example2') {
steps {
printl(my_var)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
对于字符串,将其添加到“环境”块中:
pipeline {
environment {
myGlobalValue = 'foo'
}
}
Run Code Online (Sandbox Code Playgroud)
但对于非字符串变量,我发现的声明性管道最简单的解决方案是将值包装在方法中。
例子:
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()
}
Run Code Online (Sandbox Code Playgroud)
@Sameera 的答案适用于大多数用例。不过,我在附加运算符时遇到了问题+=。所以这不起作用()MissingPropertyException:
def globalvar = ""
pipeline {
stages {
stage("whatever) {
steps {
script {
globalvar += "x"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这确实有效:
globalvar = ""
pipeline {
stages {
stage("whatever) {
steps {
script {
globalvar += "x"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10704 次 |
| 最近记录: |