一、背景

之前的项目是 public 的,如果我们在 gitlab上面把它修改成 private,然后再次打开配置,就可能会出现下面的错误,两种协议都会进行报错。

名称 IP 备注
Jenkins 172.18.2.101 内网IP
Gitlab 172.18.2.100 内网IP

ssh 协议

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

http 协议

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

二、ssh 协议配置

1、在 Jenkins 服务器上面生产 SSH Keys

如果要通过 git 协议拉取代码,需要建立 Jenkins 服务器和 Gitlab 服务器的无密码通信,我们首先要生存一组密钥对。

ssh-keygen -t rsa -C "wzlinux"
[root@jenkins ~]# ll .ssh/
total 12
-rw------- 1 root root 1675 Sep  3 22:05 id_rsa
-rw-r--r-- 1 root root  408 Sep  3 22:05 id_rsa.pub
-rw-r--r-- 1 root root  348 Sep  4 21:21 known_hosts

2、在 Gitlab 上面配置生产的 SSH Keys

我们登录 gitlab,打开自己的用户设置,选择 SSH Keys 选项进行配置,填写我们刚刚生成的公钥(id_rsa.pub)。
SSH Keys 帮助我们建立 jenkins 到 gitlab 的安全无密码连接。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

3、在 jenkins 服务器上面测试代码拉取

[root@jenkins test]# git clone git@172.18.2.100:java/game.git
Cloning into 'game'...
remote: Enumerating objects: 1768, done.
remote: Counting objects: 100% (1768/1768), done.
remote: Compressing objects: 100% (584/584), done.
remote: Total 1768 (delta 1112), reused 1768 (delta 1112)
Receiving objects: 100% (1768/1768), 15.02 MiB | 0 bytes/s, done.
Resolving deltas: 100% (1112/1112), done.

我们可以看到,配置了SSH Keys之后,我们可以直接在服务器上面无密码拉取代码了。

4、再次打开jenkins任务配置

当我们再次打开配置,发现认证还是有问题,这时候我们需要添加认证,因为 jenkins 并不知道我们的秘钥。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

添加私钥,然后确定。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

认证选择我们刚刚添加的私钥,已经不再报错。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

5、构建测试

修改了权限之后,我们重新构建项目,查看整个过程。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

没有任何问题,SSH Keys权限认证通过。

三、http 协议配置

1、配置认证

和 ssh 基本一样,我们只需要再添加认证的时候写我们在 gitlab 上面的用户名密码即可。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

然后再选择对应的认证方法。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)

2、构建测试

拉取代码也没有什么问题。

持续集成之 Jenkins 如何通过 Gitlab 上的权限认证(三)