持续集成环境Jenkins凭证管理
凭据可以用来存储需要密文保护的数据库密码、Gitlab密码信息、Docker私有仓库密码等,以便Jenkins可以和这些第三方的应用进行交互。
安装Credentials Binding插件
要在Jenkins使用凭证管理功能,需要安装Credentials Binding插件
Username with password:用户名和密码 SSH Username with private key: 使用SSH用户和密钥 Secret fifile:需要保密的文本文件,使用时Jenkins会将文件复制到一个临时目录中,再将文件路径 设置到一个变量中,等构建结束后,所复制的Secret fifile就会被删除。 Secret text:需要保存的一个加密的文本串,如钉钉机器人或Github的api token Certifificate:通过上传证书文件的方式 常用的凭证类型有:Username with password(用户密码)和SSH Username with private key(SSH密钥)
接下来以使用Git工具到Gitlab拉取项目源码为例,演示Jenkins的如何管理Gitlab的凭证。
安装Git插件和Git工具
为了让Jenkins支持从Gitlab拉取源码,需要安装Git插件以及在CentOS7上安装Git工具
在jenkins这台机器里面也要安装git
yum install git -y 查看安装的版本 [root@centos7 ~]# git --version git version 1.8.3.1
基于用户密码类型创建凭证
测试凭证是否可用
创建一个FreeStyle项目:新建Item->FreeStyle Project->确定
找到gitlab
基于SSH密钥类型
SSH免密登录示意图
1.使用root用户生成公钥和私钥
[root@centos7 ~]# ssh-keygen -t rsa 一路回车即可 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. 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:Q8EMl7ajXWfXwRzxV6ilmNIcdeSv1RKjzMmGOoKlVu8 root@centos7.9-2 The key's randomart image is: +---[RSA 2048]----+ | .+o. ...=++| | .=.. oo+o| | ..+ + ++.+| | .+ *==o.++| | ooS+.oB.. +| | =...o . + | | + . + . | | . o . | | E | +----[SHA256]-----+
查看公钥和私钥
[root@centos7 ~]# ls /root/.ssh/ id_rsa id_rsa.pub id_rsa 私钥文件 id_rsa.pub 公钥文件
2.把生成的公钥放在Gitlab中
查看ssh的公钥文件。是jenkins这台服务器的
ssh rsa_id文件提示找不到或者输入ssh私钥也连接不了对端,原因可能是openssh版本太高的问题,用指定算法和格式来生成ssh密钥对: ssh-keygen -m PEM -t rsa -b 4096 返回结果,复制返回结果到gitlab上 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/U34uj5AlZznUBnXPl88HlgzX3lQYQ+3AQhe4DdoQEM45OiLY4nERV/KZxx4CIvsNe9/MMwYUXpscYy5vjuyQ1Ygei1gm3kP9QdDAYcxTcFaJtqqrz9KAmPHDu+/Moiy7WZQXkoCdtcChZYfDkkbZ8WPdhGZrx9/9/Z0LRTHEWxfoQ6RcVgfFcM+H+47LMxEn9NYVTCNl5zczW6WIHax2bNUApNJ7EB6yuB/CqBkyoJK75idbUpBo38RICI4Wg0dmC20yum49kvEgg7cbe9rhy6CZIA8wunMa8GbQV3Brgy9lX8gUCZCkdiGRPgKfWoM4/hi2nJj2Gq/4nF9B7X9V root@centos7.9-2
3.在Jenkins中添加凭证,配置私钥
在Jenkins添加一个新的凭证,类型为"SSH Username with private key",把刚才生成私有文件内容复制过来
查看私钥文件,jenkis服务器上看,复制私钥内容
[root@centos7 .ssh]# cat /root/.ssh/id_rsa 返回结果 -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAv1N+Lo+QJWc51AZ1z5fPB5YM195UGEPtwEIXuA3aEBDOOToi 2OJxEVfymcceAiL7DXvfzDMGFF6bHGMub47skNWIHotYJt5D/UHQwGHMU3BWibaq q8/SgJjxw7vvzKIsu1mUF5KAnbXAoWWHw5JG2fFj3YRma8ff/f2dC0UxxFsX6EOk XFYHxXDPh/uOyzMRJ/TWFUwjZec3M1uliB2sdmzVAKTSexAesrgfwqgZMqCSu+Yn W1KQaN/ESAiOFoNHZgttMrpuPZLxIIO3G3va4cugmSAPMLpzGvBm0Fdwa4MvZV/I FAmQpHYhkT4Cn1qDOP4YtpyY9hqv+JxfQe1/VQIDAQABAoIBAB42ZA2cNAoEA/i8 UGxIr7Ol+T85Z5QxXeDnTvGMlmvFC5uz137iOzKe7btk2xNBTN2zOwL257Xdvqa7 7sBFFIxGe+k+3du9a4UZmIpYpzhh2/iBNPBOsBIIlNzw14w7685l9eHHC7Jb2iBi dQ7oEXInETsQxk+sz20/WEZIVfSIm3uV0fUDAhuo9gRUmdvVWC7Pk13xEcDHytFU u3GP2k8PZkv0rxn7qkBiSehT+qpNGR0yv1e3JkTV/EZZ4Wmbmrx8RfMbCy+PDuid yUQkl5/Ai1nxRiKziZelRGIWaFmho1+AG74RXtTBQZQrLzhrrr7oTPFXMsW/ztsi g5CtncECgYEA/IFSFyTGBtwetTlccxyl11/xnAaGcodCCwEdR86jfcr21Dq1CVS6 wEM/EO0GOQxwX5egMyAMH0eYsiMPRYw7BGr/UDwTlbUKFhgZPSJ9ym/GEMoyIG63 +pxUoBbcjyac6HLnx2zoojrWogE/MoBgozlgtjHdCPsPu1Z5i4me3LECgYEAwflm 6e8vDrkCHL+zzt0Z4MyxnbWC7yK7WL52Wc8QqKYGrdjWAjm7mY4PDdRsS8vbEg+4 cmCQ4AAMydsB2R0xa9GWoLn5CeSS4xrm2v3eezNPX5v01Q6aP2wojVOelsLiPrTW d0kgXWcsBOhPqubs1asv9BP+tl+O74OmuwDUpeUCgYEAtkdsyUREqAMTL+Pet0KA /b9HHUkgmWDG7ka5qnKjV1XDZWWT9s5xmgVxa3iPu3MdVASTIxUJazM2KbJhfeVD XWcYNAWKZdIxG839ukJB6HdT1h8AnKUQrxtXg9G9GqHXN35rj20xaptrAbxAsOY3 3Ny40g2g8LC8pJJCX9bTFaECgYEAnxHXw5/SB1DQ2qKa4dmPjzpNrfdcGJ9y46PN ini0QJlmgMqBNfICVjqZPc4lwUK7tGQP7jwiko937VEcgt/d131Y+RWJlQNNMdCt 4IiwGnhJby6F6PLAq6IW307jjt7iimniNpBRakdhYeTg8FXPgqmP+aksCIL0xJZB 9LkJqcECgYEA70Bd1LDfhE+QNJGUwVSEG+zx+gt67DqxzFyPvNByz5aiez03rYj5 eV1hsBwfSa8iyXra6ROVk0p4I1k1DgCDsujJaQI/UxUronY0O5QQDVfZKCLPVOBZ E4GFKwU8ia4z2DrSYDrZ7Q41ZIhuxa5ys+kbOKER2/sTAP609HXKcwE= -----END RSA PRIVATE KEY-----
添加一个test20项目做测试
SSH连接报错No ECDSA host key is known的小伙伴,意思是说首次连接gitlab服务器需要验证; 在安装Jenkins的服务器里面执行命令 git ls-remote -h 你项目的ssh地址, 之后勾选yes就会在~/.ssh下生成一个记录目标主机的文件 known_hosts, 最后把这个文件复制到jenkins的ssh目录下 cd /var/lib/jenkins/.ssh ,然后把刚才那个文件拷贝过去,最后刷新页面就ok了 解决命令如下: git ls-remote -h 10.0.0.20 cp /root/.ssh/known_hosts /var/lib/jenkins/.ssh/ -ra