詹金斯管道和Groovy。并行地迭代直到完成

时间:2018-09-14 13:39:57

标签: jenkins jenkins-pipeline

我正在草拟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])
    }
  }
}

1 个答案:

答案 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。谢谢!