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

Jenkins流水线运行时生成的动态凭证该如何进行掩码处理?

Jenkins动态获取Refresh Token的日志掩码方案

方案1:使用Mask Passwords插件(配置最简单)

确认Jenkins已安装Mask Passwords插件,直接在流水线中将所有用到动态Token的步骤用maskPasswords块包裹即可自动实现掩码:

pipeline {
    agent any
    stages {
        stage('拉取动态Refresh Token') {
            steps {
                script {
                    // 替换为你的Token请求逻辑,获取到的明文Token存入变量
                    env.DYNAMIC_REFRESH_TOKEN = sh(
                        script: 'curl -X POST https://你的认证服务地址/token -d "grant_type=refresh_token&refresh_token=你提前存在Jenkins中的固定刷新凭据"',
                        returnStdout: true
                    ).trim()
                }
            }
        }
        stage('业务接口调用') {
            steps {
                maskPasswords(varPasswordPairs: [[password: env.DYNAMIC_REFRESH_TOKEN, var: 'DYNAMIC_REFRESH_TOKEN']]) {
                    // 所有用到该Token的步骤都放在这个块内,日志中Token会自动替换为********
                    sh 'curl -H "Authorization: Bearer ${DYNAMIC_REFRESH_TOKEN}" https://你的业务接口地址'
                }
            }
        }
    }
}

方案2:使用Jenkins核心内置Secret类(无需额外安装插件)

Jenkins核心自带hudson.util.Secret工具类,专门用于包装敏感信息,被包装后的内容直接打印只会输出掩码,仅在需要使用明文时主动调用getPlainText()方法才可获取明文内容:

import hudson.util.Secret

pipeline {
    agent any
    stages {
        stage('拉取动态Refresh Token') {
            steps {
                script {
                    // 调用API获取明文Token
                    def rawToken = sh(
                        script: 'curl -X POST https://你的认证服务地址/token -d "grant_type=refresh_token&refresh_token=你提前存在Jenkins中的固定刷新凭据"',
                        returnStdout: true
                    ).trim()
                    // 用Secret类包装后赋值给全局变量,可跨步骤使用
                    DYNAMIC_REFRESH_TOKEN = Secret.fromString(rawToken)
                }
            }
        }
        stage('业务接口调用') {
            steps {
                script {
                    // 仅在需要传入明文的场景调用getPlainText()方法
                    sh "curl -H 'Authorization: Bearer ${DYNAMIC_REFRESH_TOKEN.getPlainText()}' https://你的业务接口地址"
                    // 直接打印变量只会输出****,不会泄露明文
                    echo "当前使用的Token为 ${DYNAMIC_REFRESH_TOKEN}"
                }
            }
        }
    }
}

注意事项

  • 包含Token的Shell命令建议优先用单引号包裹,通过Shell环境变量读取Token值,避免Groovy预解析阶段将明文Token打印到日志中
  • 如果你的Token有固定格式规则,可以在Jenkins全局系统配置的「掩码正则表达式」中添加对应规则,所有符合规则的字符串会全局自动掩码,无需每个流水线单独配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:00