簡體   English   中英

詹金斯共享庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM