Jenkins 中,“Use secret text(s) or file(s)” 是一个用于安全处理敏感信息
在 Jenkins 中,“Use secret text(s) or file(s)” 是一个用于安全处理敏感信息的功能,目的是避免在代码或配置中直接暴露密码、密钥、令牌等敏感数据。以下是其核心用途和典型场景:
1. 主要用途
-
安全存储敏感信息:将密码、API 密钥、SSH 私钥、证书等敏感内容存储在 Jenkins 的凭证管理系统(Credentials)中,而非硬编码在脚本或配置文件中。
-
动态注入到构建环境:在流水线(Pipeline)或作业(Job)运行时,将敏感信息以环境变量或临时文件的形式注入到构建过程中。
-
自动化清理:临时文件在构建结束后自动删除,减少泄露风险。
2. 典型使用场景
a. 认证与授权
-
Git 仓库克隆:使用 SSH 私钥或用户名/密码访问私有仓库。
// 示例:在 Pipeline 中使用 Git 凭证 checkout([ $class: 'GitSCM', branches: [[name: '*/main']], userRemoteConfigs: [[ url: 'git@github.com:user/repo.git', credentialsId: 'your-ssh-key-id' // 引用存储的 SSH 私钥凭证 ]] ])
-
访问云服务:如 AWS/Azure/GCP 的 API 密钥、Kubernetes 的
kubeconfig文件。
b. 配置文件或证书
-
数据库密码:在部署时注入
application.properties。 -
TLS 证书:将 HTTPS 证书以文件形式挂载到容器或服务中。
// 示例:挂载 SSL 证书文件 withCredentials([file(credentialsId: 'ssl-cert', variable: 'SSL_CERT')]) { sh """ cp ${SSL_CERT} ./ssl/nginx.crt docker-compose up -d """ }
c. 第三方服务集成
-
Slack 通知:发送构建状态到 Slack 频道,使用 Bot Token。
3. 如何使用
步骤 1:添加凭证
-
进入 Jenkins → Manage Jenkins → Credentials → System → Global credentials。
-
点击 Add Credentials,选择类型:
-
Secret text:适用于短文本(如 API 令牌)。
-
File:适用于证书、密钥文件(如
.pem,.key,.json)。
-
步骤 2:在 Pipeline 或 Job 中引用
-
在声明式 Pipeline 中:
pipeline { agent any environment { // 将 Secret Text 注入为环境变量 API_TOKEN = credentials('api-token-credentials-id') } stages { stage('Deploy') { steps { // 使用环境变量 sh 'curl -H "Authorization: Bearer ${API_TOKEN}" https://api.example.com' // 挂载 Secret File withCredentials([file(credentialsId: 'config-file', variable: 'CONFIG')]) { sh 'deploy-tool --config ${CONFIG}' } } } } }
-
在自由风格 Job 中:
-
在 Build Environment 配置中勾选 Use secret text(s) or file(s)。
-
选择凭证类型并绑定到环境变量或文件路径。
-
4. 安全注意事项
-
屏蔽日志输出:Jenkins 自动隐藏环境变量值(如
****),但需避免在脚本中直接打印敏感变量。 -
最小权限原则:仅授予 Job 所需的最小权限。
-
定期轮换凭证:定期更新密钥或密码,降低泄露风险。
总结
通过 “Use secret text(s) or file(s)”,Jenkins 实现了敏感信息与代码的分离,提升了安全性和可维护性。无论是文本密钥还是文件证书,都能通过统一的“凭证管理系统”安全地集成到自动化流程中。
具体操作配置案例:
- 1. jenkin的认证管理中添加你的认证数据:
比如为了访问gitlab仓库,创建了一个api key,但是不想在项目代码中直接硬编码写入这个api key(因为这样不安全),那么就可以先在jenkins中添加一个认证数据。Secret就是apikey的值,ID是自定义命名的。

- 2. 在jenkins job中添加“Use secret text(s) or file(s)”,选择刚才创建的认证数据:

然后选择认证:

比如Variable变量名称,我命名为:Testsecret
- 3.在代码(我这里的案例是java代码)中获取这个环境变量的apikey值
@PostMapping(value = "/testEnvParameter") @ApiOperation("testEnvParameter") @ResponseStatus(HttpStatus.OK) @ResponseBody public String testEnvParameter(){ //String value = System.getenv("Path");//获取系统环境变量Path //System.out.println("Path = " + value); String Testsecret = System.getenv("Testsecret"); System.out.println("Testsecret = " + Testsecret); return Testsecret; }
- 4.调用api接口,可以直接获取到jenkins job的configure中配置的“User secret text or file”这个配置选择的Credentials认证数据对应的Secret值(也就是github账号创建的api token值):

- 我这里为了测试效果,所以写了一个api直接返回这个api token值。具体用法你们就根据自己项目需求来设计就行了。比如也可以把它放到一个全局变量,这样整个项目在访问时,也是比较方便的。
- 这样就实现了把gitlab账号下的api token值抽离出来了,这样的作法就避免的直接把api token值直接硬编码写入到代码中被暴露出来的风险了。但是需要注意的是,这个api token在代码中不要出来,避免敏感信息的泄露。

浙公网安备 33010602011771号