如何在可用的詹金斯奴隶上平均分配和分配测试?

时间:2018-08-11 16:27:29

标签: java jenkins gradle

假设我们有一个包含1000个测试类的Java项目。
假设我们有4个Jenkins奴隶。

是否可以在4个可用的从属上拆分并运行250(1000/4)个测试类?

我找到的最接近的是Parallel Test Executor Plugin,但根据评论,它需要先前成功构建才能拆分测试。

我确定这是提高速度测试的简单解决方案,但我找不到有关这种情况的大量资源吗?没有人愿意拆分和分发这些测试吗?这可能吗?

我可以手动创建4个与250个测试相对应的作业,但是我不想手动管理拆分。很快我们将忘记新的测试。按包拆分也可以接受。

我正在使用gradle

我对Jenkins还是陌生的,并且我创建了一个简单的自由式作业,该作业可以自动化我的手动操作。 我正在寻求改进这种自动化设置。

1 个答案:

答案 0 :(得分:1)

我建议使用Jenkins Pipeline语法创建Jenkins作业。您可以使用parallel关键字并行执行测试。在方法内部,您可以创建逻辑以确定要运行的测试。

#!/usr/bin/env groovy

def stashName = ""

def agentName = 'dart'
properties([buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '8')), pipelineTriggers([])])
timestamps{

    stage("Initialize the Pipe")
            {
                node("dart")
                        {
                            echo "Pipeline has initialized the node."
                        }
            }

    node("dart")
            {
                stage("Checkout Source")
                        {
                            checkoutFromGit()
                        }
                stage("Building Code and Testing")
                        {
                            def parallelTests = [:]
                            def totalNodes = 5
                            for (int i = 0; i < totalNodes; i++) {
                                def modIndex = i
                                parallelTests["Unit Test ${modIndex}"] = runTest(totalNodes, modIndex)
                            }
                            parallel parallelTests
                        }

            }


    stage("Finalize Build")
            {
                echo "Pipeline has completed."
            }
}//timestamp



def runTest(numNodes, modNum) {
    return {
                    dir('test')
                            {
                                sh 'grade test'

                            } //dir(ui)



    }//return
}//runTest

https://jenkins.io/doc/book/pipeline/jenkinsfile/ https://jenkins.io/doc/book/pipeline/syntax/#parallel