Когда мы выполняем задание DSL с использованием pipline, иногда возникают случаи, когда параллельно некоторые задания содержат неверные данные, например, неправильные URL-адреса подключаемых модулей artifcats, возможно, из-за параллельного выполнения,
Детали задания иногда не отображаются правильно и не смешиваются с другими заданиями, когда мы работаем параллельно на одной и той же линии трубопровода, обычно когда мы выполняем ~ 100 заданий
на этапе я определил массив задач, включая задание сборки >> v2_Core_Task_Runner_Slack (downStream), copyAtrifcate и отчеты, наконец, мы используем команду параллельного задания для его параллельного выполнения, но иногда задания смешиваются с другими заданиями (параметр pJob ) см. код ниже
stage ("Run Tests") {
steps {
script {
tasks = [:]
products_set = [].toSet()
features_list.each {
def featureName = it.key
tasks[featureName] = {
withEnv(["FEATURE_NAME=${featureName}"]) {
def valArr = it.value.split(",")
def productName = valArr[0]
def productPath = valArr[1]
println "Run test startTime : " + metaData["tests"][it.key]['phases']['Run Tests']["startTime"]
println "Calling build for feature '${featureName}' in job '${productName}'"
pJob = build job: "v2_Core_Task_Runner_Slack", propagate: false, parameters: [
[$class: 'StringParameterValue', name: 'FeatureName', value: "${featureName}"],
[$class: 'StringParameterValue', name: 'FeaturePath', value: "${productPath}"],
[$class: 'StringParameterValue', name: 'TagName', value: "${params.TagName}"],
[$class: 'StringParameterValue', name: 'Environment', value: "${params.Environment}"],
[$class: 'BooleanParameterValue', name: 'CreateTenant', value: params.CreateTenant],
[$class: 'StringParameterValue', name: 'TagNameCondition', value: "${params.TagNameCondition}"],
[$class: 'StringParameterValue', name: 'TenantTemplate', value: "${params.TenantTemplate}"],
[$class: 'StringParameterValue', name: 'ClientLabel', value: "${params.ClientLabel}"],
[$class: 'StringParameterValue', name: 'SlackChannel', value: "${params.SlackChannel}"]
]
metaData["tests"][it.key]['phases']['Run Tests']["endTime"] = getEpochTime();
metaData["tests"][it.key]['consoleUrl'] = pJob.getAbsoluteUrl();
metaData["tests"][it.key]['result'] = pJob.getResult();
println "Job result = " + pJob.getResult() + ", Url: " + pJob.getAbsoluteUrl()
println "Copy artificats to 'allreports/${productName}/${featureName}'"
copyArtifacts(
projectName: 'v2_Core_Task_Runner_Slack',
filter: '**/report.json',
fingerprintArtifacts: true,
target: "allreports/${productName}/${featureName}",
flatten: true,
selector: specific(pJob.getId()),
optional: true
)
products_set.add(productName)
}
}
}
parallel tasks
metaData["endTime"] = getEpochTime()
metDataStr = new JsonBuilder(metaData).toPrettyString()
}
}
}
see problem below in LOGS: same URLs (1576 X 2) are pointing to the same runner job path, issues with parallelization
*[CreateDeleteObjectHistory] Job result = SUCCESS, Url: http://TestServerJenkins_Auto1:8080/job/v2_Core_Task_Runner_Slack/1576/
[Pipeline] [CreateDeleteObjectHistory] echo
[CreateDeleteObjectHistory] Copy artificats to 'allreports/MobileNative/CreateDeleteObjectHistory'
[Pipeline] [CreateDeleteObjectHistory] step
[CreateDeleteObjectHistory] Copied 1 artifact from "v2_Core_Task_Runner_Slack" build number 1576
[Pipeline] [Sanity-RightClickSchedule] echo
[Sanity-RightClickSchedule] 20190617-13:16:05.697
[Pipeline] [Sanity-RightClickSchedule] echo
[Sanity-RightClickSchedule] Job result = SUCCESS, Url: http://TestServerJenkins_Auto1:8080/job/v2_Core_Task_Runner_Slack/1576/
[Pipeline] [Sanity-RightClickSchedule] echo
[Sanity-RightClickSchedule] Copy artificats to 'allreports/Sanity/Sanity-RightClickSchedule'
[Pipeline] [Sanity-RightClickSchedule] step
[Sanity-RightClickSchedule] Copied 1 artifact from "v2_Core_Task_Runner_Slack" build number 1576
[Pipeline] [Sanity-ScheduleUpdate] readFile*