Jenkins 凭证管理

324 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

背景

在持续集成环境中,Jenkins 一般会和 Gitlab,Docker 等集成使用,和这些第三方应用交互需要密码,密钥,证书等凭证。

我们可以在 Jenkins 中安装用于管理凭证的插件,来管理这些需要密文保护的密码,例如 Gitlab 密码,Docker 私有仓库密码,证书等,这样可以方便 Jenkins 和这些第三方应用进行交互。

Credentials Binding 插件

Credentials Binding 插件允许将凭据绑定到环境变量,以便在各种构建步骤中使用。因为我安装 Jenkins 初始化时选择了安装推荐的插件,所以已经默认安装了此插件。

1650813007696-cf51e9b2-59b6-4091-ba50-855d1cc07d62.png

安装好插件,我们随便打开一个项目的配置,就可以在源码管理这里可以看到添加凭证的按钮了。

1650813169051-00b19dd5-9ebd-48ce-83cc-c05a564d9083.png

打开添加页面,如下所示:

1650813228169-1b30b192-ce53-4289-b6a1-8036218534cd.png

凭证类型

支持添加5种类型的凭证,一般使用 Username with password 和 SSH Username with password 比较多。

  • Username with password:用户名和密码。
  • GitHub App:Github 相关。
  • SSH Username with password:SSH 账号和密钥,免密登录的方式。
  • Secret file:密钥文件。使用时 Jenkins 会将密钥文件复制到一个临时目录下,并且将文件路径赋值给一个变量,构建结束后,复制的文件会被删除。
  • Secret text:加密文本串,一般是 token 类型加密文本串,例如 Github 的 Api Token。
  • Certificate:证书文件形式。

1650813303730-16ad17e3-d6c8-47d7-9d36-1777575ad0e9.png

账号密码方式拉取 Git 代码

首先需要在 Jenkins 上安装 Git 插件,然后在部署 Jenkins 的服务器上安装 Git 工具,因为我是使用 Docker 安装的 Jenkins,所以默认安装了 Git,如下所示:

 [root@chenpihost ~]# docker exec -it 538de1b1b1f5 /bin/bash
 bash-5.1$ git --version
 git version 2.34.1

如果你的服务器上没有安装 Git,可以使用如下命令进行安装:

 yum install -y git

Git 插件如下所示:

1650813937821-b870106b-e429-471a-b9a3-4796c38ee0ad.png

我们首先新建一个凭证,存储的是 Gitee 的账号和密码,如下所示:

1650814222188-9f517138-97a1-4ee0-baa6-e70b172183ec.png

保存好之后,我们就可以选择创建好的凭证,配置 Gitee 仓库项目地址,构建时就会自动拉取代码了。

1650814638687-1d3d4fe4-79cc-4311-acf7-fc09184d0b7f.png

SSH 密钥方式拉取 Gitee 代码

使用 SSH 密钥方式拉取 Gitee 上的代码,我们只需要在服务器上使用 root 用户生成公钥和私钥,将公钥配置到 Gitee 中,将私钥配置到 Jenkins 中。这样 Jenkins 就可以免密从 Gitee 上拉取代码了。

首先在 Jenkins 服务器上/root/.ssh目录下使用命令生成公钥和私钥,输入命令后一直按回车即可。

 [root@chenpihost .ssh]# ssh-keygen -t rsa
 Generating public/private rsa key pair.
 Enter file in which to save the key (/root/.ssh/id_rsa): 
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /root/.ssh/id_rsa.
 Your public key has been saved in /root/.ssh/id_rsa.pub.
 The key fingerprint is:
 SHA256:kvpxSqKCNgi6gH0b3y5AsC/ZG17KeuD7lxKLatqB21w root@chenpihost
 The key's randomart image is:
 +---[RSA 2048]----+
 |                 |
 |  .              |
 |   o             |
 |  . .  .         |
 |   =  o S        |
 |oo+ *...         |
 |O.o*EOo..        |
 |*Oo=OB+=         |
 |O+O=oo+oo        |
 +----[SHA256]-----+

生成的公钥和私钥文件如下:

 [root@chenpihost .ssh]# ls -l
 total 8
 -rw-------. 1 root root 1675 Apr 24 23:45 id_rsa
 -rw-r--r--. 1 root root  397 Apr 24 23:45 id_rsa.pub

然后登录 Gitee,通过点击头像中的设置选项,进入后台,配置刚才生成的公钥文件里面的内容。

1650815456898-846ccb37-f04e-4560-8a03-34c812c0244f.png

在 Jenkins 中新建 SSH 凭证,我们刚才使用 root 用户来生成公钥私钥,所以用户名填 root,私钥填我们生成的私钥文件中的内容。

1650815644158-4e3212a0-6bbf-4a19-b09a-d7db855140da.png

这样我们就可以在 Jenkins 中的项目配置 SSH 凭证了,注意这时需要使用项目的 SSH 地址了,如下所示:

1650815808856-7ef77f23-3d0f-4357-bc34-e2c34f249422.png

最后,我们构建项目时,可以在控制台输出中看到使用刚才配置的 SSH 凭证了。

1650816108881-f617ea61-f559-4f4a-9f7f-edc066b11713.png


本次分享到此结束啦~~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,您的支持就是我创作最大的动力!