詹金斯共享图书馆

时间:2017-10-24 12:44:21

标签: jenkins groovy

我正在为我的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被声明在方法之外,或者在这种情况下它是否正常呢?

1 个答案:

答案 0 :(得分:1)

您需要使用@Field

注释List
import 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()
    }
}