Ash*_*Ash 10 parallel-testing jenkins
我正在测试Jenkins以确定它是否适合我们的构建和测试框架.我发现Jenkins及其可用的插件符合我们的大部分需求.除了我似乎无法找到如何做一个特定类型的任务的帮助.
我们正在为嵌入式设备创建应用程序 我们有100个需要在这些设备上运行的测试.如果我们在构建之后在一个设备上运行所有测试,那么将需要几个小时才能获得结果.但是,如果我们并行运行100个设备上的测试,那么我们可以在更短的时间内获得结果.
所有测试都有非常相似的起点.使用设备的IP地址调用测试脚本以运行测试和用户名/ pw.该脚本将对设备进行必要的测试,并报告每个测试项目的通过/失败.
我认为这样做的漫长/痛苦的方法是在Jenkins中编写100个作业,每个作业将直接使用不同的测试脚本(使用上述参数)并使用可用的插件并行运行.但是,从长远来看,保持所有这些工作将是非常困难的.
因此,更好的方法是创建一个Job(让我们称之为child_tester),它可以采用以下参数:测试脚本名称,设备的IP地址,用户名/ pw等.然后使用另一个作业(让我们打电话)它mother_tester)使用不同的IP地址调用child_tester作业100次并且并行运行它们.我需要一些方法来累积child_tester作业的每个单独运行的所有测试结果,并将它们报告给mother_tester.
我的问题是有一个插件或任何方式在詹金斯完成这个?我查看了名为"Build Flow","Parallel Test Executor"和"Parameterized Trigger"的插件信息.但是,它们似乎不符合我的需要.
Dav*_*her 12
我知道你已经查看了Build Flow插件,但我不确定你为什么要解雇它.也许你可以指出我提案中的漏洞.
假设你的系统中有足够的执行程序来并行运行作业,我认为Build Flow插件和Build Flow Test Aggregator插件可以做你想要的.
Build Flow插件支持并行运行作业.我没有看到为什么Build Flow无法安排您的"子"作业与不同参数并行运行的任何原因.
Build Flow Test Aggregator从Build Flow作业的预定构建中获取测试结果,因此您的"子"作业需要发布自己的测试结果.
您需要配置"子"作业,以便通过在作业配置中选中"必要时执行并发构建"来并行运行它.
无论哪组从站提供与嵌入式设备的连接,都需要足够的执行器来并行运行您的作业.
更新:使用简单的构建流程定义:
parallel (
{ build("dbacher flow child", VALUE: 1) },
{ build("dbacher flow child", VALUE: 2) },
{ build("dbacher flow child", VALUE: 3) },
{ build("dbacher flow child", VALUE: 4) }
)
Run Code Online (Sandbox Code Playgroud)
我得到输出:
parallel {
Schedule job dbacher flow child
Schedule job dbacher flow child
Schedule job dbacher flow child
Schedule job dbacher flow child
Build dbacher flow child #5 started
Build dbacher flow child #6 started
Build dbacher flow child #7 started
Build dbacher flow child #8 started
dbacher flow child #6 completed
dbacher flow child #7 completed
dbacher flow child #5 completed
dbacher flow child #8 completed
}
Run Code Online (Sandbox Code Playgroud)
作业历史记录显示所有四个作业都在几秒钟内安排.但是,作业构建步骤包含一个人工延迟(睡眠),可以防止任何单个构建快速完成.
更新2:以下是从另一个数据结构动态生成并行任务列表的示例:
// create a closure for the deploy job for each server
def paramValues = (1..4)
def testJobs = []
for (param in paramValues) {
def jobParams = [VALUE: param]
def testJob = {
// call build
build(jobParams, "dbacher flow child")
}
println jobParams
testJobs.add(testJob)
}
parallel(testJobs)
Run Code Online (Sandbox Code Playgroud)
传递给parallel的列表是一个闭包列表,它使用唯一参数调用构建.我必须确保在闭包函数之外定义作业参数,以确保单独调度作业.
我在Jenkins邮件列表上的另一个答案和这个帖子中抄写了语法.
| 归档时间: |
|
| 查看次数: |
32002 次 |
| 最近记录: |