gpt4 book ai didi

Jenkins 共享库

转载 作者:行者123 更新时间:2023-12-04 03:08:41 24 4
gpt4 key购买 nike

我正在为我的 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() {

}

但是当 Jenkins 作业运行时 developerList 是未声明的。

所以我的问题是,List 是否应该在方法之外声明,或者在这种情况下它在哪里可以吗?

最佳答案

你需要用@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()
}
}

关于 Jenkins 共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46910965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com