Jenkins的凭证管理
Jenkins的凭证管理
什么是凭证?
凭证(cridential)是Jenkins进行受限操作时的凭据。比如使用SSH登录远程机器时,用户名和密码或SSH key就是凭证。而这些凭证不可能以明文写在Jenkinsfile中。Jenkins凭证管理指的就是对这些凭证进行管理。
为了最大限度地提高安全性,在Jenkins master节点上对凭证进行加密存储(通过Jenkins实例ID加密),只有通过它们的凭证ID才能在pipeline中使用,并且限制了将证书从一个Jenkins实例复制到另一个Jenkins实例的能力。
也因为所有的凭证都被存储在Jenkins master上,所以在Jenkins master上最好不要执行任务,以免被pipeline非法读取出来。那么在哪里执行pipeline呢?应该分配到Jenkins agent上执行。
创建凭证
首先确保当前用户有添加凭证的权限。我们使用超级管理员的身份登录。单击Jenkins首页左侧的Credentials→System

然后单击“Global credentials (unrestricted)”链接,再单击“Add Credentials”

凭证的类型
Jenkins默认支持以下凭证类型:Secret text、Username with password、Secret file、SSHUsername with private key、Certificate:PKCS#12、Docker Host CertificateAuthentication credentials。
Secret text是一串需要保密的文本,比如GitLab的API token。

Username with password指用户和密码凭证。

Secret file指需要保密的文本文件。使用Secret file时,Jenkins会将文件复制到一个临时目录中,再将文件路径设置到一个变量中。构建结束后,所复制的Secret file会被删除。

SSH Username with private key指一对SSH用户名和密钥。

添加凭证后,安装Credentials Binding Plugin插件,通过其提供的withCredentials步骤就可以在pipeline中使用凭证了。
Secret text

Username with password

Secret file

SSH Username with private key

sshUserPrivateKey函数还支持以下参数。
• usernameVariable:SSH用户名的变量名。
• passphraseVariable:SSH key密码的变量名。
credentials helper方法使用凭证
Secret text:

AWS-SECRET-KEY-ID和AWS-SECRET-ACCESS-KEY是我们预先定义的凭证ID。creden-tials方法将凭证的值赋给变量后,我们就可以像使用普通环境变量一样使用它们了,如:echo"${AWS ACCESS KEY ID}"。
Username with password:

与 Secret text 不同的是,我们需要通过 BITBUCKET CREDS USR 拿到用户名的值,通过BITBUCKET CREDS PSW拿到密码的值。而变量BITBUCKET CREDS的值则是一个字符串,格式为:<用户名>:<密码>。
Secret file:

credentials helper方法只支持Secret text、Username with password、Secretfile三种凭证。
使用HashiCorp Vault
(1)安装HashiCorp Vault插件

(2)添加Vault Token凭证

(3)配置Vault插件

(4) 在pipeline中读取

我们可以在environment和steps中使用vault步骤。推荐在environment中使用。
vault步骤的参数如下:
• path,存储键值对的路径。
• key,存储内容的键。
• vaultUrl(可选),vault服务地址。
• credentialsId(可选),vault服务认证的凭证。
如果不填vaultUrl与credentialsId参数,则使用系统级别的配置。
在Jenkins日志中隐藏敏感信息
如果使用的是credentials helper方法或者withCredentials步骤为变量赋值的,那么这个变量的值是不会被明文打印到Jenkins日志中的。除非使用以下方法:

在没有使用credential的场景下,我们又该如何在日志中隐藏变量呢?可以使用Masked Pass-word插件。通过该插件提供的包装器,可以隐藏我们指定的敏感信息。

初次使用 Masked Password 插件很容易以为是使用 s1 和 s2 作为变量的,如 echo"被隐藏的密文:${s1} 和 ${s2}"。实际上,var参数只是用于方便在自由风格的Jenkins项目中区分不同的需要隐藏的密文。在pipeline中使用,它就没有存在的意义了。但是即使这样也不能省略它,必须传一个值。password参数传的是真正要隐藏的密文。
那么,为什么echo "secret1"这条语句中并没有使用预定义的变量,secret1也会被隐藏呢?这是由Masked Password插件的实现方式决定的。
Jenkins 提供了 ConsoleLogFilter 接口,可以在日志打印阶段实现我们自己的业务逻辑。Masked Password 插件实现了 ConsoleLogFilter 接口,然后利用正则表达式将匹配到的文本replaceAll成********。
MaskPasswordsBuildWrapper包装器除了支持varPasswordPairs参数,还支持varMaskRegexes参数,使用自定义的正则表达式匹配需要隐藏的文本。写法如下:

通过Masked Password插件还可以设置全局级别的密文隐藏,在Manage Jenkins→ConfigureSystem页中可以找到,具体配置如图

Jenkins的凭证管理的更多相关文章
- Jenkins凭证管理
目录 一.简介 二.管理凭证 三.常用凭证 保密文本 账号密码 保密文件 账号秘钥 四.优雅使用凭证 保密文本 账号密码 保密文件 五.凭证插件 集成HashiCorp Vault pipeline ...
- 有手就行2——持续集成环境—Jenkins安装、插件、用户权限及凭证管理
有手就行2--持续集成环境-Jenkins安装.插件.权限及凭证管理 持续集成环境(1)-Jenkins安装 持续集成环境(2)-Jenkins插件管理 持续集成环境(3)-Jenkins用户权限管理 ...
- [原]Jenkins(十三)---jenkins用户权限管理
* 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5337874.html 两种策略的比较
- Jenkins的制品管理
Jenkins的制品管理 制品是什么? 也叫产出物或工件.制品是软件开发过程中产生的多种有形副产品之一.广义的制品包括用例.UML图.设计文档等.而狭义的制品就可以简单地理解为二进制包.虽然有些代码是 ...
- 用XCA(X Certificate and key management)可视化程序管理SSL 证书(3)--创建自己定义的凭证管理中心(Certificate Authority)
在第"用XCA(X Certificate and key management)可视化程序管理SSL 证书(2)---创建证书请求"章节中,我们介绍了怎样用XCA创建SSL证书请 ...
- 【Devops】【docker】【CI/CD】jenkins源码管理,添加SSH地址后报错+Jenkins构建报错:Please make sure you have the correct access rights and the repository exists.
jenkins源码管理,添加SSH地址后报错: Could not read from remote repository. Please make sure you have the correct ...
- Gitlab+Jenkins学习之路(九)之Jenkins的远程管理和集群
一.Jenkins的远程管理 Jenkins的远程管理方式包含: Shell ssh SSH Plugin ansible.saltstack (1)Shell ssh在项目构建时,jenkins使用 ...
- 使用XCA(X Certificate and key management)可视化项目经理SSL 凭证(4)--凭借自身的凭证管理中心的定义(Certificate Authority)签名证书申请
随着XCA(X Certificate and key management)可视化项目经理SSL 证书系列文章(2)和(3)中.我们学习了怎样用XCA(X Certificate and key m ...
- Jenkins 凭证管理 - 看这一篇就够了~
目录 Credential 类型 Credential 安全 Credential 创建 Credential ID 定义 Credential 使用 Credential 相关插件 最佳实践 许多三 ...
随机推荐
- AUTODESK 卸载工具,完美彻底卸载清除干净autodesk各种软件残留注册表和文件
小伙伴是不是遇到 CAD/3dmax/maya/Revit/Inventor 安装失败或者安装不了的问题了呢?AUTODESK系列软件着实令人头疼,CAD/3dmax/maya/Revit/Inven ...
- Lua 学习 chapter30 编写c函数的技巧 - Jow的博客
目录 数组操作 字符串操作 在c函数中保存状态 生活总需要一点仪式感,然后慢慢的像那个趋向完美的自己靠近. 数组操作 Lua中的数组就是以特殊的方式使用边.像lua_setttable and lua ...
- spring配置ConcurrentMap实现缓存
spring本身内置了对Cache的支持,本次记录的是基于Java API的ConcurrentMap的CacheManager配置. 1.xml文件中增加命名空间 <beans xmlns=& ...
- Nginx笔记总结十五:nginx+keepalive+proxy_cache配置高可用nginx集群和高速缓存
nginx编译 wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz ./configure --prefix=/usr/loca ...
- Tensorflow 错误集锦
文章目录 参考文献 本文记录笔者在Tensorflow使用上的一些错误的集锦,方便后来人迅速查阅解决问题. 我是留白. 我是留白. CreateSession still waiting for re ...
- 【转】PHP中被忽略的性能优化利器:生成器.md
PHP 如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明 ...
- 创建 GPG 证书
一.什么是 GPG 以下引自维基百科: GNU Privacy Guard(GnuPG或GPG)是一种加密软件,它是PGP加密软件的满足GPL的替代物.GnuPG依照由IETF订定的OpenPGP技术 ...
- PHPExcel之蛋疼
限制了内存,处理个80+K的表就会GG,所以还要尽量删空行,选中某一行如A3,ctrl+shift+↓然后ctrl+小键盘的减号最后需要ctrl+s
- ZYNQ自定义AXI总线IP应用——PWM实现呼吸灯效果
一.前言 在实时性要求较高的场合中,CPU软件执行的方式显然不能满足需求,这时需要硬件逻辑实现部分功能.要想使自定义IP核被CPU访问,就必须带有总线接口.ZYNQ采用AXI BUS实现PS和PL之间 ...
- C语言程序设计100例之(31):全排列问题
例31 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入格式 n(1≤n≤9) 输出格式 由1-n组成的所有不重复的数字 ...