[英]Cannot access Jenkins parameters from a templatized pipeline argument
我無法從myPipelineTemplate
的范圍訪問任何Jenkins參數(例如: A
如下)。
從Jenkinsfile
文件:
library 'myPipelineTemplate'
properties([
parameters([
booleanParam(name: 'A', defaultValue: false, description: '')
])
])
myPipelineTemplate {
arg1 = A
arg2 = true
}
從管道模板中:
def call(body) {
def args = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = args
body()
echo "$args.arg1" // return (null)
echo "$args.arg2" // return (true)
pipeline {
...
}
有鉛嗎?
編輯:詹金斯版。 2.107.1
您正在使用Closure.DELEGATE_FIRST
策略,並且delegate
是Map
。 您的arg2 = true
會分配屬性,但是A
屬性查找是該映射上的鍵查找,這就是分配為null
。 永遠不會在owner
上下文上進行A
屬性查找,該owner
上下文最終將委托給params.A
。
使用您的委派策略,調用看起來像這樣:
delegate.arg1 = delegate.A
delegate.arg2 = true
其中delegate
是def args = [:]
。 在這種情況下, delegate
處理屬性查找。 該值為null
,然后將其分配給delegate.arg1
。 調用后的地圖為[arg1:null, arg2:true]
。 如果您將其更改為params.A
,它會像delegate.params.A
這將失敗, NullPointerException
,因為delegate.params
是null
。
為了確保呼叫解決車主,你也可以使用this.params
(見的意義這個問題/答案this
在Closure
):
myPipelineTemplate {
arg1 = this.params.A
arg2 = true
}
您還可以更改解析策略:
body.resolveStrategy = Closure.OWNER_FIRST
delegate.arg1 = A
delegate.arg2 = true
我建議僅將您的call
方法從Closure
參數更改為。 任何:
Map
例如,對於Map
:
def call(Map args) {
// ...
}
myPipelineTemplate([
arg1: params.A
arg2: true
])
解決方法:
properties([
parameters([
booleanParam(name: 'A', defaultValue: false, description: '')
])
])
def params = params
myPipelineTemplate {
arg1 = A
arg2 = true
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.