繁体   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