当前情况:目前在Jenkins 1中,我让JobA和JobB分别使用某个文件JobAFile和JobBFile运行测试。作业的名称存储在数组中,并在下游参数化触发器中传递。
我现在正在分别为JobA和JobB创建动态创建的文件JobAFilePt1,JobBFilePt1,JobBFilePt2等。这需要我在parameterFactories中使用forMatchingFiles。但是,JobA内部有不同的作业,例如JobASubJob1,JobASubJob2,这弄乱了forMathcingFiles模式匹配。
为了解决这个问题,我尝试添加以下内容:
JobAJobs.each { String subJob->
steps {
downstreamParameterized {
trigger('subJob') {
paramterFactories {
forMatchingFiles("somePattern${subJob}")
}
}
}
}
问题:但这只是使其连续运行。如何获得并行运行的步骤?还是至少在触发器完成构建后才阻止它?我在网上看过,只找到了声明性管道和脚本化管道而不是Job DSL的解决方案。
作为另一种可能的解决方案::我现在正在将其设为一个阶段,并且每个phaseJob都是动态创建的。但是,由于我需要将“ n”个文件作为参数传递给特定文件(可以通过模式找到),因此我不确定如何实现此目的。如何动态为其赋予参数?
phase("Run jobs") {
JobAJobs.each { String subJob -> {
phaseJob("subJob") {
parameters {
<someParameterType>
}
}
}
}
我想代替someParameterType尝试传递文件参数,但不确定如何处理。有什么建议吗?
答案 0 :(得分:0)
您的问题是典型的管道用例。当用于计划构建时,Job-DSL变得非常古怪。它不应用于此目的。 您可以简单地创建管道作业,并利用并行块。使用脚本语法,您可以执行以下操作:
node {
stage("build") {
parallel (
JobAJobs.each { subJob ->
build(
job: subJob,
parameters: [
[
$class: 'StringParameterValue',
name: 'PARAM_NAME',
value: 'myvalue'
]
]
)
}
)
}
}
This可以帮助您入门。