首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在声明性管道中处理全局变量?

如何在声明性管道中处理全局变量?
EN

Stack Overflow用户
提问于 2017-12-08 23:02:59
回答 4查看 27.2K关注 0票数 10

以前,关于如何重写环境指令中定义的变量的asked a question似乎是不可能的。

我想在一个阶段中设置一个变量,并让其他阶段可以访问它。在声明式管道中,似乎唯一的方法是在script{}块中完成此操作。

例如,我需要在结帐后设置一些变量。因此,在结帐阶段结束时,我有一个脚本{}块来设置这些变量,它们可以在其他阶段中访问。

这行得通,但感觉不对。出于可读性的考虑,我更喜欢在管道的顶部声明这些变量,并覆盖它们。因此,这意味着在一开始就有一个“设置变量”阶段,其中包含一个只定义变量的script{}块--这很难看。

我很确定我在这里遗漏了一个明显的特性。声明性管道是否具有全局变量功能,还是必须使用脚本{}

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-12-12 17:34:59

就像@mkobit所说的,你可以在流水线块之外将变量定义到全局级别。你试过吗?

代码语言:javascript
复制
def my_var
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                my_var = 'value1'
            }
        }

        stage('Example2') {
            steps {
                printl(my_var)
            }
        }

    }
}
票数 9
EN

Stack Overflow用户

发布于 2018-07-04 20:16:04

这是没有错误的工作,

代码语言:javascript
复制
def my_var
pipeline {
    agent any
    environment {
        REVISION = ""
    }
    stages {
        stage('Example') {
            steps {
                script{
                    my_var = 'value1'
                }
            }
        }

        stage('Example2') {
            steps {
                script{
                    echo "$my_var" 
                }
            }
        }
    }
}
票数 14
EN

Stack Overflow用户

发布于 2019-05-16 07:01:50

对于字符串,将其添加到'environment‘块中:

代码语言:javascript
复制
pipeline {
  environment {
    myGlobalValue = 'foo'
  }
}

但对于非字符串变量,我找到的声明性管道最简单的解决方案是将值包装在一个方法中。

示例:

代码语言:javascript
复制
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()
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47716933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档