凭证 Credentials
凭证可以是一段字符串如密码,私钥文件等,是Jenkins进行受限操作时的凭据。比如SSH登录远程服务器,用户名,密码或SSH key就是凭证。这些凭据不要明文写在Jenkinsfile中,Jenkins有专门管理凭证的地方和插件。
添加凭证
添加凭证步骤(需要有凭证权限,这里使用超级管理员身份)
参数:
- Kind | 凭证类型
- Scope | 凭证作用域,分Global,用于pipeline就选这个,System,用于Jenkins系统本身,如电子邮件身份验证,代理连接等。
- ID | 在pipeline中使用凭证的唯一标识 | 可以自己起,如果不填Jenkins会分配一个,必须唯一,而且创建后无法修改。建议自己起成容易识别的,比如 xxx-project-dingtalk-robot-token
关于Kind凭证类型,有如下几种:
- Username with password | 用户名和密码
- Docker Host Certificate Authentication
- SSH Username with private key | 一对SSH用户名和密钥
- Secret file | 需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中,等构件结束后,所复制的Secret file就会被删除。
- Secret text | 需要保存的一个保密的文本串,如钉钉机器人或Github的api token
- Certificate
添加凭证后,需要安装"Credentials Binding Plugin"插件,就可以在pipeline中使用withCredentials步骤使用凭证了。
pipeline中使用凭证
- withCredentials
// 通过 credentialsId 取出对应凭证,然后赋值给名为'my_dingtalk_token'(自己起)的变量
// 根据变量在其他step中使用
withCredentials([string(credentialsId: 'dingding-robot-token', variable: 'my_dingtalk_token')]) {
// 注意:构建记录中只会输出 ****
echo "${my_dingtalk_token}"
}
比如钉钉讨论组建立机器人后会提供给你webhook的地址https://oapi.dingtalk.com/robot/send?access_token=123456789abcde
,将后面的access_token 存到 Secret text 中。
- credentials
如果觉得withCredentials比较麻烦,声明式pipeline还提供了 helper 方法,在environment中使用credentials('credentials-id')就可以方便取出。
注意:credentials 指令只能使用在 environment 段中,而且目前只支持Secret text,Username with password 和 Secret file 三种。
groovy
#!groovy
pipeline {
agent any
environment {
ding_robot_token = credentials('dingding-robot-token')
}
stages {
stage('debug') {
steps {
sh "printenv"
}
}
}
post {
success {
script {
// 输出 **** ,即在console中看不到真实信息
echo "${env.ding_robot_token}"
}
// 通知钉钉机器人,需要安装dingtalk插件
dingTalk accessToken: "${env.ding_robot_token}", imageUrl: '', jenkinsUrl: '', message: '构建成功', notifyPeople: ''
}
}
}
进阶:使用 Vault
如果你要管理很多服务器密钥,数据库密码,用户密码或token等敏感信息,可以使用 Vault 他是hashicorp公司出品的专业管理机密和保护敏感数据的工具。
他有以下功能:
- 提供 图形化界面,CLI命令和HTTP API
- 方便的密码维护和变更管理功能,比如密码需要定期更换,使用Vault只需要在vault端更新密码,通知应用重新拉取就可以了
- 动态定期生成唯一密码,省去人工维护麻烦
- 支持 ACL,角色,策略,认证等
安装非常简单,就一个二进制包,直接运行即可。具体使用请参考官方文档写的非常清晰,再结合Jenkins的vault插件。就可以方便的管理凭证了。