我正在为我的Jenkins构建组建一个共享库。我之前并没有真正使用过groovy,所以我正在关注文档(总是一个好的开始:-))并创建了一个位于/vars/myFile.groovy
的文件。
现在我有一个列表(在下面的例子中缩写)我需要使用并将它放在一个方法中,但是我认为它在方法之外会更好,所以它只是实例化一次而不是每次调用该方法?
/vars/myFile.groovy
#!/usr/bin/groovy
def slack_handle(String dev_name) {
developerList = [
[name: "Richard Lewis", slack_handle: "<@richardlewis123>"],
[name: "Mark Turner", slack_handle: "<@markTurner123>"]
]
return developerList.find {it['name'] == dev_name}?.get("slack_handle")
}
def other_method() {
}
def another_method() {
}
然后在我的Jenkinsfile中,我可以做到
SLACK_HANDLE = slackNotification.slack_handle("Richard Lewis")
echo "${SLACK_HANDLE}"
"<@richardlewis123>"
如何在方法之外声明列表,然后在此共享库中的slack_handle
方法中使用
我试过了
final def developerList = [
[name: "Richard Lewis", slack_handle: "<@richardlewis123>"],
[name: "Mark Turner", slack_handle: "<@markTurner123>"]
]
def slack_handle(String dev_name) {
return developerList.find {it['name'] == dev_name}?.get("slack_handle")
}
def other_method() {
}
def another_method() {
}
但是詹金斯的工作运行developerList
是未申报的。
所以我的问题是,如果List被声明在方法之外,或者在这种情况下它是否正常呢?
答案 0 :(得分:1)
您需要使用@Field
注释Listimport groovy.transform.Field
def call(String dev_name) {
return slack_handle(dev_name)
}
def slack_handle(String dev_name) {
return developerList.find {it['name'] == dev_name}?.get("slack_handle")
}
def otherMethod() {
echo "I got called"
}
@Field
def developerList = [
[name: "Richard Lewis", slack_handle: "<@richardlewis123>"],
[name: "Mark Turner", slack_handle: "<@markTurner123>"]
]
然后可以在管道中使用函数,例如以下方式:
node {
stage('Call Function') {
// either
echo myFile("Mark Turner")
// or
echo myFile.slack_handle("Mark Turner")
myFile.otherMethod()
}
}