gpt4 book ai didi

jenkins - 如何与 Jenkins 并行运行相同的工作多次?

转载 作者:行者123 更新时间:2023-12-04 03:20:31 28 4
gpt4 key购买 nike

我正在测试 Jenkins,看看它是否适合我们的构建和测试框架。我发现 Jenkins 及其可用的插件满足了我们的大部分需求。除了我似乎无法找到有关如何完成特定类型任务的帮助。

我们正在为嵌入式设备创建应用程序。我们有数百个测试需要在这些设备上运行。如果我们在构建后在一台设备上运行所有测试,则需要几个小时才能获得结果。但是,如果我们在 100 个设备上并行运行测试,那么我们可以在更短的时间内获得结果。

所有的测试都有非常相似的起点。使用设备的 IP 地址和用户名/密码调用测试脚本以运行测试。该脚本将在设备上进行必要的测试并报告每个测试项目的通过/失败。

我认为这样做的漫长/痛苦的方法是在 Jenkins 中编写 100 个作业,每个作业将直接是一个不同的测试脚本(具有上述参数)并使用可用插件并行运行这些脚本。但是,从长远来看,维持所有这些工作将非常困难。

因此,更好的方法是创建一个 Job(我们称之为 child_tester),它可以接受以下参数:测试脚本名称、设备的 IP 地址、用户名/密码等。然后使用另一个作业(我们称之为it Mother_tester) 使用不同的 IP 地址调用 child_tester 作业 100 次并并行运行它们。我需要某种方式来累积每次运行 child_tester 作业的所有测试结果,并将它们报告给 Mother_tester。

我的问题是在 Jenkins 中是否有插件或任何方法可以实现这一点?我查看了名为“Build Flow”、“Parallel Test Executor”和“Parameterized Trigger”的插件信息。但是,它们似乎不符合我的需求。

最佳答案

我知道您已经查看了 Build Flow 插件,但我不确定您为什么不考虑它。也许你可以指出我的建议中的漏洞。

假设您的系统中有足够多的执行程序来并行运行作业,我认为 Build Flow pluginBuild Flow Test Aggregator plugin可以做你想做的。

  • Build Flow 插件支持 running jobs in parallel .我看不出有任何理由说明 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) }
    )

    我得到输出:
    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
    }

    作业历史记录显示,所有四个作业都在几秒钟内被调度。但是作业构建步骤包含人为延迟( sleep ),这会阻止任何单个构建快速完成。

    更新 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)

    传递给 parallel 的列表是一个使用唯一参数调用构建的闭包列表。我必须确保在闭包函数之外定义作业参数,以确保单独安排作业。

    我抄袭了另一个 answer 的语法和 this thread在 Jenkins 邮件列表中。

    关于jenkins - 如何与 Jenkins 并行运行相同的工作多次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705222/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com