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

如何在Jenkins声明式流水线中隐藏script.sh内的密码?

解决Jenkins声明式流水线注入全局凭据到脚本的问题

要让script.sh能读取到Jenkins全局凭据的密码并隐藏敏感信息,需要在Jenkinsfile中正确加载凭据并注入为环境变量,以下是两种可行方案:

方案一:使用environment块加载凭据

在流水线的environment块中通过credentials()方法加载全局凭据,Jenkins会自动生成包含用户名和密码的环境变量,且密码会被自动屏蔽避免泄露。

修改后的Jenkinsfile

pipeline {
    agent any

    environment {
        // 替换为你实际的全局凭据ID
        MY_GLOBAL_CREDS = credentials('your-credentials-id')
    }

    stages {
        stage('Checkout') {
            steps {
                git url: 'git@github.com:org/repository.git'
            }
        }
        
        stage('Script') {
            steps {
                // 将凭据的用户名和密码注入shell环境,再执行脚本
                sh '''
                    export USERNAME="${MY_GLOBAL_CREDS_USR}"
                    export MY_CREDS_PSW="${MY_GLOBAL_CREDS_PSW}"
                    ./script.sh
                '''
            }
        }
    }   
}

说明:

  • MY_GLOBAL_CREDS = credentials('your-credentials-id')会自动生成两个环境变量:MY_GLOBAL_CREDS_USR(用户名)和MY_GLOBAL_CREDS_PSW(密码)
  • 在sh步骤中通过export将变量传递给script.sh,确保脚本能读取到

方案二:使用withCredentials步骤(更灵活)

借助Jenkins凭据绑定插件(默认已安装)的withCredentials步骤,直接指定要注入的用户名和密码变量名,适合复杂场景。

修改后的Jenkinsfile

pipeline {
    agent any

    stages {
        stage('Checkout') {
            steps {
                git url: 'git@github.com:org/repository.git'
            }
        }
        
        stage('Script') {
            steps {
                withCredentials([usernamePassword(
                    credentialsId: 'your-credentials-id', // 替换为实际凭据ID
                    usernameVariable: 'USERNAME_ENV',
                    passwordVariable: 'MY_CREDS_PSW' // 与script.sh中的变量名对应
                )]) {
                    sh '''
                        export USERNAME="${USERNAME_ENV}"
                        ./script.sh
                    '''
                }
            }
        }
    }   
}

说明:

  • usernameVariable和passwordVariable定义的变量会直接在withCredentials块内生效
  • 密码变量会被Jenkins自动屏蔽,不会出现在流水线日志中

对应script.sh的调整

确保脚本优先读取环境变量,可优化为:

#!/bin/bash

# 从环境变量获取用户名,若未传入则用默认值(可选)
USERNAME="${USERNAME:-default-user}"
PASSWD="$MY_CREDS_PSW"

# 后续业务逻辑...

注意事项

  • 确认凭据ID与Jenkins全局凭据页面的ID完全一致,避免拼写错误
  • 确保流水线执行用户拥有该凭据的读取权限
  • 禁止在脚本中打印PASSWD变量值,防止敏感信息泄露

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:05:24