Jenkins Pipeline是官方支持的DAG编排标准方案,替代已废弃的Build-Flow插件;它通过Jenkinsfile定义串行、并行、条件分支等拓扑结构,并可搭配Blue Ocean、Pipeline Utility Steps等插件增强可视化与状态传递能力。

Jenkins 本身不提供原生的 Build-Flow 插件,该插件早在 Jenkins 2.x 时代就已正式废弃并停止维护(官方于 2017 年归档,GitHub 仓库已 archived)。它依赖过时的 Groovy DSL 和旧版 Jenkins 扩展机制,与当前主流 Jenkins(≥ 2.357,要求 Java 11+)及 Pipeline 引擎严重不兼容,无法在现代 Linux 环境中可靠使用。
你现在真正可用、官方支持且功能更强大、更符合 DAG 编排需求的方式是:Jenkins Pipeline(尤其是 Declarative Pipeline) + 插件增强。
用 Jenkins Pipeline 实现真正的 DAG 编排
Pipeline 是 Jenkins 内置的核心能力,通过 Jenkinsfile 定义任务拓扑,天然支持串行、并行、条件分支、失败处理等 DAG 关键语义。
关键能力对应关系:
-
节点依赖:用
stage嵌套 +steps顺序执行,或用parallel块定义并发分支 -
条件分支(类似状态分支/switch):用
when { expression { ... } }或script { if (...) { ... } } -
上游状态判断:通过
currentBuild.result或自定义环境变量传递前序结果 -
动态跳过/激活下游:结合
when+ 参数化构建或构建后操作(Post Actions)实现
示例:一个含条件分支的简易 DAG
pipeline {
agent any
parameters {
string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: 'Target environment')
}
stages {
stage('Checkout') {
steps { checkout scm }
}
stage('Build & Test') {
steps {
sh 'mvn clean package'
sh 'mvn test'
}
post {
failure { script { env.BUILD_FAILED = 'true' } }
}
}
stage('Deploy') {
when { expression { env.BUILD_FAILED != 'true' && params.DEPLOY_ENV == 'staging' } }
steps { sh 'scp target/app.jar user@staging:/opt/app/' }
}
stage('Prod Approval') {
when { expression { params.DEPLOY_ENV == 'prod' } }
steps { input message: 'Approve production deploy?', id: 'prod-approval' }
}
stage('Deploy to Prod') {
when { expression { currentBuild.rawBuild.getCause(hudson.model.Cause$UserCause) != null } }
steps { sh 'ansible-playbook deploy-prod.yml' }
}
}
}补充 DAG 能力的推荐插件
若需更贴近可视化 DAG 工具(如 DolphinScheduler、阿里云 MSE DAG)的体验,可搭配以下插件:
- Pipeline Utility Steps:读写 JSON/YAML/Properties,便于跨 stage 传递结构化状态
- Conditional BuildStep:提供图形化条件判断入口(适用于 Freestyle 项目过渡期)
- CloudBees Folder Plugin:按业务/环境组织 Pipeline,实现逻辑分组与权限隔离
- Blue Ocean:提供可视化 Pipeline 编辑器和 DAG 执行图(实时渲染依赖关系与状态)
⚠️ 注意:不要尝试安装已下架的 Build-Flow、Build Flow Plugin 或其衍生版本——它们会导致 Jenkins 启动失败、插件冲突或安全漏洞。
更轻量、更专注 DAG 的替代方案(适合中小团队)
如果你发现 Jenkins Pipeline 配置仍显厚重,或需要快速编排异构任务(Python 脚本、HTTP 请求、本地命令混合),可考虑这些现代轻量级替代:
- cat-tj/pipeline-orchestrator:纯 Python 实现,DAG 定义即代码,自带 Web UI,可嵌入 Flask/FastAPI,适合数据处理、巡检、报表类流水线
- Apache Airflow:成熟企业级调度器,DAG 定义清晰,Operator 丰富,适合定时+事件驱动混合场景
- Temporal:面向长期运行、高可靠性工作流(如订单履约、审批链),支持暂停/重试/补偿,学习成本略高
这些工具均可部署在 Linux 上,通过 Docker 或直接运行,与 Jenkins 形成互补而非替代——例如用 Jenkins 触发代码构建,再调用 Airflow API 启动后续数据同步 DAG。
不推荐走 Build-Flow 这条老路。用 Pipeline 是标准解法,加 Blue Ocean 看图、配插件补能力、必要时引入专用 DAG 引擎,才是当前 Linux 下稳定、可维护、可持续演进的实践路径。


















