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

如何在Jenkins共享库中统一配置所有流水线的通用选项?

统一Jenkins流水线Options的共享库实现方案

方案1:封装全局流水线入口函数

这是最直接的解决方案——在共享库中定义一个包含所有通用options的流水线模板函数,各个仓库的Jenkinsfile只需调用该函数并传入自定义流水线逻辑即可。

共享库实现(vars/pipelineWithDefaults.groovy)

def call(Map config = [:], Closure body) {
  pipeline {
    agent any
    options {
      // 集中配置所有通用选项
      disableConcurrentBuilds()
      parallelsAlwaysFailFast()
      buildDiscarder(logRotator(numToKeepStr: '10'))
      timestamps()
      timeout(time: 45, unit: 'MINUTES')
    }
    stages {
      // 执行用户自定义的流水线阶段
      body()
    }
    // 统一添加全局后置步骤
    post {
      always {
        echo "流水线执行完成,构建编号: ${currentBuild.number}"
      }
    }
  }
}

业务仓库Jenkinsfile调用

@Library('your-shared-library-name') _

pipelineWithDefaults {
  stage('单元测试') {
    steps {
      sh './gradlew test'
    }
  }
  stage('Docker构建') {
    steps {
      sh 'docker build -t ${IMAGE_NAME}:${BUILD_TAG} .'
    }
  }
}

优势:修改通用options时只需更新共享库中的模板,所有流水线自动同步;新增流水线无需复制粘贴配置,直接调用函数即可。


方案2:提取通用Options为独立函数(支持灵活扩展)

如果部分流水线需要在通用配置基础上添加自定义options,可以把通用选项封装成独立函数,在Jenkinsfile中按需引入。

共享库实现(vars/commonPipelineOptions.groovy)

def call() {
  return [
    disableConcurrentBuilds(),
    parallelsAlwaysFailFast(),
    buildDiscarder(logRotator(numToKeepStr: '10')),
    timestamps()
  ]
}

业务仓库Jenkinsfile调用

@Library('your-shared-library-name') _

pipeline {
  agent any
  options {
    // 引入通用选项
    commonPipelineOptions()
    // 添加当前流水线特有的配置
    timeout(time: 60, unit: 'MINUTES')
    quietPeriod(5)
  }
  stages {
    stage('集成测试') {
      steps {
        sh './run-integration-tests.sh'
      }
    }
  }
}

优势:既保留了通用配置的统一性,又允许单个流水线灵活扩展特有选项,适合混合场景。


方案3:全局变量自动注入(进阶场景)

如果希望完全隐藏通用配置的实现细节,可以通过共享库的全局变量机制实现自动注入,但需要注意Jenkins的类路径配置,适合复杂的全局管控需求。

共享库实现(src/com/yourcompany/jenkins/DefaultOptions.groovy)

package com.yourcompany.jenkins

import org.jenkinsci.plugins.workflow.cps.CpsScript

class DefaultOptions implements Serializable {
  private final CpsScript script

  DefaultOptions(CpsScript script) {
    this.script = script
  }

  def apply() {
    script.options {
      disableConcurrentBuilds()
      parallelsAlwaysFailFast()
      buildDiscarder(logRotator(numToKeepStr: '10'))
      timestamps()
    }
  }
}

配套入口函数(vars/initPipeline.groovy)

def call(Closure body) {
  def defaultOpts = new com.yourcompany.jenkins.DefaultOptions(this)
  pipeline {
    agent any
    options {
      defaultOpts.apply()
    }
    stages {
      body()
    }
  }
}

业务仓库Jenkinsfile调用

@Library('your-shared-library-name') _

initPipeline {
  stage('代码扫描') {
    steps {
      sh 'sonar-scanner'
    }
  }
}

优势:通用配置完全封装在共享库内部,业务侧无需关注实现细节;但实现复杂度较高,适合有统一管控需求的大型团队。


注意事项

  1. 修改共享库后,确保Jenkins加载最新版本(可在共享库配置中开启"Load implicitly"或手动刷新)。
  2. 后续新增流水线只需引入共享库并调用对应入口函数,无需重复编写options配置。
  3. 修改通用配置时,仅需走共享库的内部评审流程,无需逐个修改业务仓库的Jenkinsfile,彻底消除重复维护成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:25:17