如何在Jenkinsfile中使用环境变量来编写Groovy函数

19

我正在尝试在Jenkinsfile中使用定义在任何节点外部的环境变量。我可以将它们引入任何节点的管道步骤范围内,但不能在函数内部引用它们。目前我能想到的唯一解决方案是将它们作为参数传递。但我希望能直接在函数内部引用这些env变量,以便不必传递那么多参数。以下是我的代码。如何使函数输出BRANCH_TEST的正确值?

def BRANCH_TEST = "master"

node {
    deploy()
}

def deploy(){
    echo BRANCH_TEST
}

Jenkins控制台输出:

[Pipeline]
[Pipeline] echo
null
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

这个回答解决了你的问题吗?如何在Groovy中创建和访问全局变量? - Neuron
1个回答

34

解决方案如下:

  1. 使用@Field注释。

  2. 在声明中删除“def”。有关使用“def”的说明,请参见Ted's answer

解决方案1(使用@Field

import groovy.transform.Field

@Field def BRANCH_TEST = "master"

   node {
       deploy()
   }

   def deploy(){
       echo BRANCH_TEST
   }

解决方案2(删除def)

BRANCH_TEST = "master"

   node {
       deploy()
   }

   def deploy(){
       echo BRANCH_TEST
   }

说明在这里,同样在这个SO问题中得到了回答: 如何在Groovy中创建和访问全局变量?


1
你需要在答案中删除重复的 import 语句。 - Rao
为什么去除“def”可以解决问题?你能解释一下问题是什么,以及你的解决方案是如何工作的吗? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接