You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现多分支Jenkins流水线分节点执行阶段并避免代码重复?

避免Jenkins多分支流水线重复代码的方案

当然有办法避免重复编写Build阶段的代码!你可以通过提取可复用的流水线逻辑来实现,既满足在Ubuntu和Red Hat节点并行构建的需求,又能保持代码的简洁性。下面是最实用的两种实现方式:

方案一:使用Groovy闭包封装可复用步骤

Groovy的闭包特性可以让你把重复的Build逻辑封装成一个可调用的块,然后在不同的节点配置中复用它。

修改后的Jenkinsfile示例:

#!/usr/bin/groovy

// 封装可复用的Build步骤逻辑
def buildOnNode(String nodeLabel) {
    return {
        agent { node { label nodeLabel customWorkspace "/src/$BUILD_NUMBER" } }
        environment {
            SRC_DIR = "$WORKSPACE"
            BUILD_DIR="/build/$BUILD_NUMBER"
        }
        steps {
            dir(BUILD_DIR) {
                sh '$SRC_DIR/build.sh'
            }
        }
    }
}

pipeline {
    stages {
        stage('Parallel Build') {
            parallel {
                stage('Build on Ubuntu') {
                    steps {
                        script {
                            buildOnNode('ubuntu')()
                        }
                    }
                }
                stage('Build on Red Hat') {
                    steps {
                        script {
                            buildOnNode('redhat')()
                        }
                    }
                }
            }
        }
        stage('Test') {
            agent { node { label 'ubuntu' customWorkspace "/src/$BUILD_NUMBER" } }
            environment {
                SRC_DIR = "$WORKSPACE"
                BUILD_DIR="/build/$BUILD_NUMBER"
            }
            steps {
                dir(BUILD_DIR) {
                    sh '$SRC_DIR/test.sh'
                }
            }
        }
    }
}

说明:

  • 我们定义了buildOnNode函数,它接收节点标签作为参数,返回一个包含完整Build逻辑的闭包。
  • 在Parallel Build阶段的并行块中,只需要调用这个函数并传入对应的节点标签,就能复用Build逻辑,无需重复编写代码。
  • Test阶段保持原有的配置,仅在Ubuntu节点运行。

方案二:使用Jenkins共享库(适合大型项目)

如果你的团队有多个流水线需要复用这类逻辑,推荐使用Jenkins共享库来封装通用步骤:

  1. 创建共享库的vars/buildOnNode.groovy文件,内容和上面的闭包逻辑一致。
  2. 在Jenkinsfile中引入共享库,然后直接调用buildOnNode('ubuntu')和buildOnNode('redhat')即可。

这种方式的优势是可以在整个团队的流水线中共享逻辑,进一步提升可维护性。

注意事项:

  • 确保你的Jenkins环境支持Groovy闭包和并行阶段(需要Pipeline Parallel Steps插件)。
  • 如果节点的自定义工作区或环境变量有差异,可以在闭包中增加参数来灵活配置。

内容的提问来源于stack exchange,提问作者T code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:19:16