我正在開發一個共享庫,以便從我的Jenkinsfile中執行它。這個庫有一個帶可選引數的函式,我希望能夠通過指定我的值來執行這個帶任何數量引數的函式。我在網上搜索了很多,但沒有找到好的答案,所以也許這里有人能幫助我。 舉個例子。
def doRequest(def moduleName=env. MODULE_NAME, def environment=env.ENVIRONMENT, def repoName=env.REPO_NAME) {
<一些代碼在這里>。
}
如果我從我的Jenkinsfile中這樣執行它:
script {
sendDeploymentStatistics.doRequest service_name
該函式將 "service_name "值放到模塊名稱中,但我如何指定 "repoName "引數? 在Python中,你可以這樣做:
function_name(moduleName=service_name, repoName=repo_name)
但是在Groovy Jenkinsfile中,我找不到正確的方法。
誰能幫我找出正確的語法嗎?
謝謝你!
uj5u.com熱心網友回復:
Groovy有默認引數的概念。如果你改變了引數的順序,使環境排在最后:
def doRequest(def modulesName=env. MODULE_NAME, def repoName=env.REPO_NAME, def environment=env.ENVIRONMENT) {
<一些代碼在這里>。
}
然后你對function_name的呼叫將采用environment的默認值:
function_name(moduleName=service_name, repoName=repo_name)
然而Groovy也對命名引數提供了某種支持。它不像Python那么好,但你可以讓它作業,如下:
env = [MODULE_NAME: 'foo', ENVIRONMENT: 'bar', REPO_NAME: 'baz']
def doRequest(Map args = [:] ) {
defaultMap = [moduleName: env.MODULE_NAME, environment: env.ENVIRONMENT, repoName: env.REPO_NAME]
args = defaultMap << args
return "${args.moduleName} ${args.environment} ${args.repoName}"/span>
}
assert 'foo bar baz' == doRequest()
assert 'foo bar qux' == doRequest(repoName: 'qux')
assert '1 2 3' == doRequest(repoName: '3', moduleName: '1', environment: '2')
對于命名引數,你需要一個Map型別的引數(默認值為空map)。然后Groovy會在呼叫函式時將引數映射到Map中的條目。
要使用默認值,你需要創建一個帶有默認值的地圖,并將該默認地圖與傳入的引數合并。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/318076.html
標籤:
