凭据管理是什么
Jenkins 集中托管凭据:用户名密码、SSH 私钥、Secret 文本与文件(如 kubeconfig、证书)。流水线通过 environment 的 credentials() 或 withCredentials 绑定使用,日志对凭据值自动打码。凭据按作用域分系统级与文件夹级,多人共用实例时按团队文件夹隔离,避免全局暴露。
基本信息
| 类型 | usernamePassword、sshPrivateKey、secret text、secret file |
|---|---|
| 绑定 | credentials('id') 或 withCredentials 代码块 |
| 作用域 | 系统级(全局)与文件夹级 |
| 掩码 | 日志自动打码,但不等于绝对安全 |
| 存储 | 凭据存于 Jenkins 主目录,由实例密钥加密保护 |
典型使用场景
- 镜像仓库登录:withCredentials 注入用户名密码
- SSH 部署:私钥类凭据供远程发布使用
- API 调用:token 以 Secret 文本管理
- 文件类凭据:kubeconfig、证书以 Secret 文件绑定为临时路径
- 团队隔离:文件夹级凭据只对文件夹内作业可见
- 轮换:改动前先盘点引用点,确认影响面再替换
注册表登录
注册表登录
steps {
withCredentials([usernamePassword(credentialsId: 'registry',
usernameVariable: 'REG_USER', passwordVariable: 'REG_PASS')]) {
sh 'docker login -u "$REG_USER" -p "$REG_PASS" registry.example.com' # 仅块内可见
}
}
# 文件类凭据:withCredentials([file(credentialsId: 'kubeconfig', variable: 'KCFG')])类型选择读法
| 类型 | 适用 | 注意 |
|---|---|---|
| usernamePassword | 仓库、系统登录 | 密码随凭据集中轮换 |
| sshPrivateKey | 远程部署 | 私钥不进流水线文本 |
| secret text | token、密钥串 | 避免拼接后回显 |
| secret file | kubeconfig、证书 | 绑定为临时文件路径 |
| 文件夹级 | 多团队隔离 | 权限跟随文件夹 |
凭据掩码不是绝对防护:避免回显与产出包含凭据的文件,按最小范围授权。
string 与 file 的差别:file 会落成临时文件、随用随清,适合 kubeconfig 这类整文件场景。
文件夹级凭据跟随文件夹权限:多人共用实例时按团队隔离,别把所有凭据都放系统级。
使用建议
- 多环境凭据:预发与生产使用不同凭据 id,避免串环境
- 创建先入库:先把值存进 Jenkins 再在流水线引用 id,值不落在配置文本里
- 定期盘点:闲置凭据吊销、引用清单复核,持续收窄暴露面