当前情况:目前在Jenkins 1中,我有JobA和JobB分别使用某个文件JobAFile和JobBFile运行测试。作业的名称存储在一个数组中,并作为下行参数化触发器传递。
我现在正在分别为JobA和JobB创建动态创建的文件JobAFilePt1、JobBFilePt1和JobBFilePt2等。这需要我在parameterFactories中使用forMatchingFiles。然而,JobA内部有不同的作业,如JobASubJob1、JobASubJob 2,这会混淆forMathingFiles模式匹配。
为了解决这个问题,我试着放一些类似的东西:
JobAJobs.each { String subJob->
steps {
downstreamParameterized {
trigger('subJob') {
paramterFactories {
forMatchingFiles("somePattern${subJob}")
}
}
}
}
问题:但这只是使它串行运行。如何使步骤并行运行?或者至少在触发器的构建完成之前不要阻止它?我在网上查找过,只找到了声明性管道和脚本化管道的解决方案,而不是Job DSL。
作为另一种可能的解决方案:我现在正在考虑将其作为一个阶段,每个阶段Job都是动态创建的。然而,因为我需要将"n"个文件作为参数传递给某个文件(可以用模式找到),所以我不确定如何实现这一目标。如何动态地为其提供参数?
phase("Run jobs") {
JobAJobs.each { String subJob -> {
phaseJob("subJob") {
parameters {
<someParameterType>
}
}
}
}
代替someParameterType,我想尝试传入文件参数,但不确定如何实现。有什么建议吗?
您的问题是一个典型的管道用例。作业DSL在用于调度构建时变得非常怪异。它不应该用于此。您可以简单地创建一个管道作业,并利用并行块。使用脚本语法,您可以执行以下操作:
node {
stage("build") {
parallel (
JobAJobs.each { subJob ->
build(
job: subJob,
parameters: [
[
$class: 'StringParameterValue',
name: 'PARAM_NAME',
value: 'myvalue'
]
]
)
}
)
}
}
这可以帮助你开始。