我正在草拟Jenkins管道。我可以在5个并行节点上以8组为一组运行测试,直到完成。
下面我将其简化为在3个节点上以8个为一组。
我想知道是否可以在管道中循环完成各个阶段,直到完成每个阶段为止。
TESTS.collate(8).collate(3).each {
parallel {
stage('run tests 1') {
agent { label 'node1' }
runTests(it[0])
}
stage('run tests 2') {
agent { label 'node2' }
runTests(it[1])
}
stage('run tests 3') {
agent { label 'node3' }
runTests(it[2])
}
}
}
答案 0 :(得分:1)
这是我的Jenkinsfile的相关部分
def splitNBTests = NB_TESTS.split("\n").toList().collate(7)
println(splitNBTests)
if (!params.runCukes) {
echo "SKIPPING NEW BUSINESS RUN IN OZ JOB DUE TO DISABLED PARAMETER"
} else {
SUITE_RUN_ID = UUID.randomUUID().toString()
def commands = splitNBTests.collect { def testsForNode ->
createCmdLineForCukes(testsForNode, PROFILE)
}
try {
TAGS = '"@regression ~@wip"'
SCENARIO_COUNT = "${DIRECTORY_CHANGE} && bundle && bundle exec rake run_scenario_count[${TAGS},${PROFILE}] SUITE_RUN_ID=${SUITE_RUN_ID}"
sh(returnStdout: true, script: SCENARIO_COUNT)
def stepsForParallel = [:]
commands.toList().eachWithIndex { def myCommand, int i ->
stepsForParallel["RunTests${i}"] = {
stage("RunTests${i}") {
node {
label 'grange-jenkins-slave'
sh("mount -a")
sh(myCommand)
}
}
}
}
parallel stepsForParallel
我在Kubernetes上拥有我们的Jenkins Master,带有Kubernetes插件可以动态扩展从属Pod。对于我们当前的回归运行,如果我们每个运行7个测试,则可能会带来大约24个节点,但现在限制一次只能运行10个。
我所说的“白名单”是在进程内脚本批准下的。我目前将其设置为staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Object java.lang.String
。
我猜应该再锁定一点。提示赞赏。我从Ruby来到Groovy,并以最少的时间真正学习了Groovy。我会说它非常相似,并且从Groovy社区获得帮助绝对有用,因此我可以了解与Ruby #each_slice
中的#collate
等效的Groovy。谢谢!