[英]Jenkins shared library
我正在為我的 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 注釋列表
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()
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.