Jenkins 多架构并发构建实战

背景介绍

在我们的 C++ 应用 的构建过程中,随着业务对异构架构(如 ARM 和 AMD)支持的需求不断增长,我们希望能够:

  • 同时构建出适用于 ARM 和 AMD 架构的应用包;

  • 两者构建过程独立但并发执行,节省整体构建时间;

  • 如果任意一个架构构建失败,立即终止另一个任务,尽早失败反馈,节省资源和时间。

传统的 Jenkins 构建方式是串行或全部并行执行后再汇总结果,这与我们**"快速失败"**的目标相悖。因此,设计了以下解决方案。


技术目标

  • 使用 Jenkins Pipeline 实现主 Job(app)触发两个子 Job 并发构建(如 app-arm 和 app-amd);

  • 任意一方失败,立即终止所有构建任务

  • 具备可复用性、参数传递完整、流程清晰的 Pipeline 结构。


问题挑战

Jenkins 的 parallel 默认行为为:

等待所有分支完成,再汇总结果。即使某个子任务失败,也不会立刻终止其他任务。

我们需要主动启用一个选项来改变这一行为。


解决方案:使用 failFast 参数 + Scripted parallel

在 Jenkins Declarative Pipeline 中,我们使用 script 块嵌入 Scripted 风格的 parallel(failFast: true),达到"谁先失败就立刻全局失败退出"的效果。


实现代码

主 Job(app)Jenkinsfile 关键段如下:

复制代码
pipeline {
    agent { node { label 'multi-build' } }
    stages {
        stage('Parallel Build for ARM & AMD') {
            steps {
                script {
                    parallel(
                        'Build AMD': {
                            build job: 'app-amd_daily_v3',
                                  parameters: [
                                      string(name: 'appType', value: "${params.appType}"),
                                      // ...其他参数略
                                  ]
                        },
                        'Build ARM': {
                            build job: 'app-arm_daily_v3',
                                  parameters: [
                                      string(name: 'appType', value: "${params.appType}"),
                                      // ...其他参数略
                                  ]
                        },
                        failFast: true // 关键参数
                    )
                }
            }
        }
    }
}

效果

  • 构建开始后,两个子任务并行执行;

  • 如果 ARM 构建失败,AMD 构建立刻被中止;

  • 如果两者均成功,主任务成功;

  • 故障可立即感知并反馈,避免浪费编译资源。


附加优化建议

  • 对子 Job 设置不同的 node 标签,实现架构隔离,例如:

    复制代码
    agent { node { label 'arm-builder' } }  // ARM
    agent { node { label 'amd-builder' } }  // AMD
  • 子 Job 中设置适当的 timeout,避免死锁;

  • 使用邮件或企业微信通知机制,快速告警失败情况。


总结收获

本次实践充分利用了 Jenkins Pipeline 的 Scripted 嵌套能力,绕过了 Declarative 对 failFast 的限制,实现了高效、高反馈速度的多架构并行构建方案。这种模式非常适合:

  • 多平台(arm64、amd64)构建;

  • 多版本(企业版 / 开源版)并行验证;

  • CI 构建任务中敏捷反馈、高效利用资源的场景。

相关推荐
小小测试开发几秒前
PromptFoo 源码分析与工程实战:LLM 测试框架的架构与最佳实践
人工智能·架构
葬送的代码人生39 分钟前
别再让 AI 瞎写代码了!Vibe Coding 三步法教你写出靠谱代码
前端·设计模式·架构
杉氧1 小时前
KMP 自动化之路 (4):iOS 自动化构建与签名 —— 攻克最硬的骨头
android·架构·android jetpack
taocarts_bidfans1 小时前
极简架构降载技术|从西班牙红薯饭去繁就简,解析反向海淘系统轻量化架构优化方案
架构·taocarts
大侠锅锅2 小时前
第 19 篇:远程运维体系——指标、SSH、日志与 OTA 升级
运维·ssh
公众号:fuwuqiBMC4 小时前
(转自“服务器BMC”)服务器BMC芯片——多Die(芯片)封装
运维·服务器·人工智能
gs801405 小时前
【实战】记一次 Linux 服务器入侵排查:grok-agent 后门木马深度剖析与彻底清理
linux·运维·服务器
cyforkk5 小时前
重新认识 MCP:大模型时代的“标准接口”与架构边界
架构
富贵冼中求5 小时前
从单向流到双向 RPC:Agent 通信协议的范式分叉与 ACP 协议实战拆解
设计模式·架构
D2aZXN3FhrDa7e2126 小时前
佛山乐从低预算实体店如何选择?看美诚AI自动化获客方案
运维·人工智能·自动化·佛山美诚科技有限公司