【问题标题】:Running parallel stages on node with one executor使用一个执行器在节点上运行并行阶段
【发布时间】:2018-08-08 04:04:48
【问题描述】:

假设我有一个 jenkins 节点和一个执行器,我必须并行运行,即测试和构建阶段。

node("jenkinsNodeWithOneExecutor") {

    parallel {
        test: {echo "run test" ... }
        build: {echo "run build" ...}
    }

}

这将如何运作?在日志中,我看到它并行运行。可能吗?我以为每个并行任务都需要自己的执行者......

附言。尝试运行两次作业时:正在等待下一个可用的执行程序...

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    当您并行运行一项作业时,该作业将分支并创建两个不同的作业,这两个作业将(理想情况下)同时执行。

    在您的示例中,您实际上有三个工作:原始工作、“测试”工作和“构建”工作。您需要三个可用于并行处理脚本的执行程序。如果您在尝试运行并行作业的同一节点上运行初始作业,并且您只有一个执行器,则此作业将始终无限期地挂起,等待永远不可用的执行器。如果您在另一个节点上运行原始作业,它会按顺序处理您的作业,因为您只有一个执行程序。

    您确定要在构建的同时运行测试吗?通常,测试依赖于您构建的任何内容。这将在构建的同时运行测试,并且您的构建工件可能尚不可用。

    【讨论】:

    • 谢谢!测试和构建阶段是一个例子,当然它不会并行执行:)所以根据你的回答,当尝试在同一节点上运行两次作业但并行运行阶段时,是否有可能阻塞并发构建在一个詹金斯文件里面工作吗?我知道这听起来很奇怪,但它是这样工作的......
    • 当使用管道时,你告诉 Jenkins 哪些阶段可以并行化。然后由 Jenkins 来决定如何根据您制定的规则实际分配工作。如果您没有足够的执行程序来实际并行执行步骤,Jenkins 将序列化这些步骤。同样,完全有可能使工作陷入僵局,尤其是在您多次构建的情况下。您可以在管道和环境中设置规则以防止死锁。
    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 2018-05-21
    • 2020-02-17
    • 2017-12-05
    • 2021-03-13
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多