我正在使用宣告性管道,其中當我構建管道時它給了我java.io.NotSerializableException: org.jenkinsci.plugins.workflow.job.WorkflowJob錯誤。
這些是我正在使用的兩種方法:-
@NonCPS
def getJob(name) {
def hi = Hudson.instance
return hi.getItemByFullName(name, Job)
}
@NonCPS
def getParam(WorkflowJob job, String paramName) {
def prop = job.getProperty(ParametersDefinitionProperty.class)
for (param in prop.getParameterDefinitions()) {
if (param.name == paramName) {
return param
}
}
return null
}
下面是我收到此錯誤的代碼部分。
stages{
stage("A"){
steps{
script {
def job = getJob(JOB_NAME)
def param = getParam(job, "AWS Ser")
def service_name = ("${SERVICE_NAME}".replace('AWS Ser:', '')).toString().tokenize(',[]')
if (service_name != 'All') {
def regions = "${REGIONS}".toString()
regions.split('\n').each() {
service_name.each() {
sh '''
echo "Welcome"
'''
}
}
}
在這里,如果您看到我何時放置 sh 腳本,則會收到此錯誤,如果我洗掉此 sh 腳本,則不會出現錯誤。
我試圖排除故障,但上面提到的 2 種方法有問題。
uj5u.com熱心網友回復:
不要將WorkflowJob物件回傳到 Pipeline 步驟。重構您的函式,如下所示。
@NonCPS
def getJob(name) {
def hi = Hudson.instance
return hi.getItemByFullName(name, Job)
}
@NonCPS
def getParam(String jobName, String paramName) {
def job = getJob(jobName)
def prop = job.getProperty(ParametersDefinitionProperty.class)
for (param in prop.getParameterDefinitions()) {
if (param.name == paramName) {
return param
}
}
return null
}
然后在 Pipeline 階段呼叫 getParam as。
def param = getParam(JOB_NAME, "AWS Ser")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/508710.html
