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

如何在Jenkins流水线中动态设置选择参数的默认值为上次执行值?

动态设置布尔选择参数的默认值(以上次执行值为准)

可以实现,核心是通过持久化存储记录上次执行的参数值,下次构建时读取该值作为参数默认值。以下是Jenkins流水线的具体实现方案:

实现思路

  • 用Jenkins全局环境变量或归档文件存储上次执行的参数值
  • 自定义辅助函数读取历史值,作为布尔参数的默认值
  • 每次构建完成后,将本次参数值更新到存储中

完整流水线示例

pipeline {
    agent any
    parameters {
        booleanParam(
            name: 'ENABLE_FEATURE',
            defaultValue: getLastParamValue('ENABLE_FEATURE', false), // 首次执行默认用false
            description: '默认值为上次执行的选择,无需重复设置'
        )
    }
    stages {
        stage('业务执行') {
            steps {
                echo "当前参数选择: ${params.ENABLE_FEATURE}"
                // 这里添加你的业务逻辑
            }
        }
        stage('保存参数值') {
            steps {
                script {
                    // 将本次参数值写入全局环境变量(需管理员权限)
                    def envProp = jenkins.model.Jenkins.instance.getGlobalNodeProperties()
                        .get(hudson.slaves.EnvironmentVariablesNodeProperty.class)
                    envProp.envVars.put('LAST_ENABLE_FEATURE', params.ENABLE_FEATURE.toString())
                    jenkins.model.Jenkins.instance.save()
                    
                    // 无管理员权限时,改用归档文件方案:
                    // writeFile file: "last_${env.BRANCH_NAME}_param.txt", text: params.ENABLE_FEATURE.toString()
                    // archiveArtifacts artifacts: "last_${env.BRANCH_NAME}_param.txt", fingerprint: true
                }
            }
        }
    }
    post {
        always {
            // 确保构建失败时也能保存参数值(可选)
            script {
                if (params.ENABLE_FEATURE != null) {
                    def envProp = jenkins.model.Jenkins.instance.getGlobalNodeProperties()
                        .get(hudson.slaves.EnvironmentVariablesNodeProperty.class)
                    envProp.envVars.put('LAST_ENABLE_FEATURE', params.ENABLE_FEATURE.toString())
                    jenkins.model.Jenkins.instance.save()
                }
            }
        }
    }
}

// 读取历史参数值的辅助函数
def getLastParamValue(String paramName, def fallbackValue) {
    // 全局变量读取逻辑
    def envProp = jenkins.model.Jenkins.instance.getGlobalNodeProperties()
        .get(hudson.slaves.EnvironmentVariablesNodeProperty.class)
    def lastValue = envProp.envVars.get("LAST_${paramName}")
    
    // 归档文件读取逻辑(替换上面的全局变量逻辑即可)
    // def lastValueFile = "last_${env.BRANCH_NAME}_param.txt"
    // def lastValue = fileExists(lastValueFile) ? readFile(lastValueFile).trim() : null
    
    return lastValue != null ? lastValue.toBoolean() : fallbackValue
}

关键注意事项

  • 权限要求:修改全局环境变量需要Jenkins管理员权限,如果没有权限,优先使用归档文件方案,通过archiveArtifacts持久化参数文件,下次构建前读取。
  • 多分支隔离:如果是多分支流水线,全局变量会被所有分支共享,归档文件时建议加上分支名前缀(如示例中的last_${env.BRANCH_NAME}_param.txt),避免分支间互相干扰。
  • 首次执行:第一次构建时没有历史值,会使用你指定的fallbackValue(示例中为false),后续执行会自动沿用上次的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:15:33