Sre*_*a E 2 jenkins jenkins-plugins jenkins-groovy jenkins-pipeline
我有一个管道作业,该管道作业执行一些操作序列(例如,Build >> Run >> Report)。我已经将此序列放入for循环中,因为我可以获得一个参数,我应该重复同一序列多少次。请找到我编写的示例代码。
for (int i = 0; i < <param_val>; ++i){
node{
stage('Build') {
build 'Build'
}
stage('Run') {
build 'Run'
}
stage('Reporting') {
build 'Reporting'
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的代码正在等待一个完整的序列发生,然后继续运行下一个序列。那很费时间。我有更多的从属代理,可以并行运行序列。如何运行for循环的每次迭代?
我想到了一个解决方案:让管道具有实际顺序
node{
stage('Build') {
build 'Build'
}
stage('Run') {
build 'Run'
}
stage('Reporting') {
build 'Reporting'
}
}
Run Code Online (Sandbox Code Playgroud)
有另一个带有for循环的管道,它将通过wait触发第一个管道:false:
for (int i = 0; i < <param_val>; ++i){
build(job: 'pipeline-1', wait: false)
}
Run Code Online (Sandbox Code Playgroud)
这行得通吗?还是我们有更好的选择对单个管道执行相同操作?
将代码放入闭包中的循环中:
def oneNode = { c ->
node {
build job: 'Build', parameters: [string(name: 'Component', value: c)]
build 'Run'
build 'Reporting'
}
}
Run Code Online (Sandbox Code Playgroud)
然后绘制要同时运行的所有闭包的映射:
def jobs = [:]
def components = params.Componets.split(",")
for (int i = 0; i < components.size(); ++i) {
def component = components[i].trim()
jobs[component] = {
oneNode(component)
}
}
Run Code Online (Sandbox Code Playgroud)
最后parallel,对生成的地图使用该步骤:
stage('Build, run, report') {
<the code from the above steps>
parallel jobs
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |