Дженкинс Трубопровод и Groovy.Перебирайте вещи параллельно, пока они не будут выполнены - PullRequest
0 голосов
/ 14 сентября 2018

Я делаю набросок трубопровода Дженкинса. Я могу запускать тесты в группах по 8 на 5 параллельных узлах, пока они не будут выполнены.

Ниже я упрощаю это, чтобы сделать группы по 8 на 3 узла.

Я хочу знать, смогу ли я зациклить этапы в конвейере, чтобы завершить их, пока не пройду каждый из них.

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 голосов
/ 20 сентября 2018

Это релевантная часть моего 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

У меня есть мастер Jenkins на Кубернетесе с плагином Kubernetes для динамического масштабирования подчиненных модулей.Для нашего текущего прогона регрессии это может привести к примерно 24 узлам, если мы запустим по 7 тестов на каждом, но пока мы ограничиваем его одновременным запуском до 10.

«Белый список», о котором я говорил, находился подУтверждение сценария в процессе.В настоящее время у меня установлено значение staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Object java.lang.String.

Я предполагаю, что это должно быть заблокировано немного больше.Советы приветствуются.Я пришел в Groovy из Ruby и взломал это вместе с минимальным временем, чтобы по-настоящему выучить Groovy.Я скажу, что это было достаточно похоже, и было определенно полезно получить помощь от сообщества Groovy, чтобы я мог узнать о Groovy, эквивалентном #each_slice в Ruby, #collate.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...