jenkins 持续集成 - gitlab 自动触发构建,远程构建

请先参考前两篇文章
jenkins持续集成
harbor仓库

更改jenkins的触发方式

配置构建:

把镜像推送到harbor仓库:
在这里插入图片描述
在这里插入图片描述
由于我们的上传需要认证,证书我们已经做过了,所以现在我们以用户和密码的方式进行认证。
输入harbor的用户和密码。

[root@server2 docker]# ll /var/run/docker.sock 
srw-rw---- 1 root docker 0 Jun 16 14:21 /var/run/docker.sock		# jenkins用户没有权限
[root@server2 docker]# chmod 777 /var/run/docker.sock 

我们先手动触发一次。

在这里插入图片描述
就构建成功了。
在这里插入图片描述
镜像到harbor上了。

我们当前使用的触发方式是没分钟触发一次,太频繁,一小时又太长,我们想让实时的去触发,每次又变动的时候就触发。就等与我们现在是jenkins主动触发,要变成gitlab的主动触发,实时的触发。

我们去demo项目的配置中去进行更改。我们要先添加gitlab的插件,然后才能支持这个功能

在这里插入图片描述
这个插件允许GitLab触发Jenkins构建并在GitLab UI中显示其结果。直接安装。
在这里插入图片描述
完成后触发器就会出现着一个选项,当gitlab有变动时构建。
点击高级:
在这里插入图片描述
生成一个token。
由于gitlab是私有仓库,所以我们先去gitlab上的管理中心打开外发请求:
在这里插入图片描述
然后去gitlab的demo这个项目中设置webhooks:

在这里插入图片描述
将地址和token写上去。保存就好了。

现在我们测试自动触发:

[root@server1 demo]# vim index.html 
[root@server1 demo]# cat index.html 
www.caoaoyuan.ooooo
www.hhhhhhh.ooooo
www.hhhhhhh.ooooo
[root@server1 demo]# vim index.html 
[root@server1 demo]# cat index.html 
liiiiiiiiiiiiiii
liiiiiiiiiiiiiii
liiiiiiiiiiiiiii
	# 我们将内容更改成这样子

[root@server1 demo]# git commit -a -m "add index.html v3"
[master 69e275c] add index.html v3
 1 file changed, 3 insertions(+), 3 deletions(-)
[root@server1 demo]# git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 253 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@172.25.254.1:root/demo.git
   3540479..69e275c  master -> master
Branch master set up to track remote branch master from origin.		# 提交到代码库

在这里插入图片描述
github更新了
在这里插入图片描述
jinkens进行了构建交付

在这里插入图片描述
也推送到了harbor仓库中。
在这里插入图片描述
而且我们之前构建的被demo项目触发的docker项目也构建了。

远程构建

我们当前的构建任务时在本地进行构建,然后在推送到远程主机的,那我们想把构建任务发送到远程专门的构建主机完成,该怎麼做那。
我们在开启一台server4,安装docker:

在这里插入图片描述

[root@server4 ~]# vim /etc/sysctl.d/bridge.conf 
[root@server4 ~]# cat /etc/sysctl.d/bridge.conf 
net.bridge.bridge-nf-call-ip6tables = 1			# 打开功能
net.bridge.bridge-nf-call-iptables = 1
[root@server4 ~]# sysctl --system		# 使生效
[root@server4 ~]# systemctl enable --now docker

接下来我们就要开是docker的远程主机构建。
在这里插入图片描述
docker host usrl 这里就不能折磨写了,需要使用tls的方式,启用认证,在连接远程构建主机:

  1. 生成key和ca证书
[root@server4 ~]# openssl genrsa -aes256 -out ca-key.pem 4096
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:

[root@server4 ~]# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:westos
Organizational Unit Name (eg, section) []:linux  
Common Name (eg, your name or your server's hostname) []:server6
Email Address []:root@server6.org

[root@server4 ~]# ls
ca-key.pem  ca.pem

  1. 生成server-key和csr证书请求文件文件(server4为dcker主机名)
[root@server4 ~]# openssl genrsa -out server-key.pem 4096

[root@server4 ~]# openssl req -subj "/CN=server4" -sha256 -new -key server-key.pem -out server.csr

[root@server4 ~]# ls
ca-key.pem  ca.pem  server.csr  server-key.pem
  1. 可以使用ip地址方式进行tls连接
[root@server4 ~]# echo subjectAltName = DNS:server4,IP:172.25.254.4,IP:127.0.0.1 >> extfile.cnf

[root@server4 ~]# echo extendedKeyUsage = serverAuth >> extfile.cnf

[root@server4 ~]# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf 
Signature ok
subject=/CN=server4
Getting CA Private Key
Enter pass phrase for ca-key.pem:
[root@server4 ~]# ls
ca-key.pem  ca.pem  ca.srl  extfile.cnf  server-cert.pem  server.csr  server-key.pem

server-cert.pem 就生成了,但是这时我们的docker无法使用证书,那docker是怎样读取的那

  1. 安装docker证书:
修改docker的启动文件:
[root@server4 ~]# cp /usr/lib/systemd/system/docker.service /etc/systemd/system/
[root@server4 ~]# vim /etc/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376

##:
--tlsverify		# 启用tls校验
--tlscacert=/etc/docke/ca.pem		# ca证书位置
--tlscert=/etc/docker/server-cert.pem		# server证书位置
--tlskey=/etc/docker/server-key.pem		# serverkey的位置
 -H tcp://0.0.0.0:2376		# 启用tcp的2376端口

然后将证书文件放到指定位置:
[root@server4 ~]# cp ca.pem server-cert.pem  server-key.pem /etc/docker/
[root@server4 ~]# ls /etc/docker/
ca.pem  key.json  server-cert.pem  server-key.pem
[root@server4 ~]# systemctl daemon-reload
[root@server4 ~]# systemctl restart docker
[root@server4 ~]# netstat -tnlp |grep 2376
tcp6       0      0 :::2376                 :::*                    LISTEN      15207/dockerd  
# 指定的2376端口打开
  1. 生成客户端key和证书
[root@server4 ~]# openssl genrsa -out key.pem 4096

[root@server4 ~]# ls
key.pem  
[root@server4 ~]# openssl req -subj '/CN=client' -new -key key.pem -out client.csr	# 生成证书请求

[root@server4 ~]# echo extendedKeyUsage = clientAuth > extfile.cnf		# 给客户端使用的
[root@server4 ~]# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf
Enter pass phrase for ca-key.pem:

[root@server4 ~]# ls
 cert.pem  client.csr  extfile.cnf  key.pem  		# 这些就是给客户端使用的认证证书。

在jenkins中去使用
在这里插入图片描述
docker url 改为server4主机的2376端口。
并且添加server端的认证,将key.pem ,cert.pem 和ca.pam 分别放进去,点击添加。
在这里插入图片描述
就完成了。

[root@server4 ~]# cd /etc/docker/

[root@server4 docker]# vim daemon.json
## 创建一个阿里云的加速器,方便pull。
{
	"registry-mirrors": ["https://vo5twm71.mirror.aliyuncs.com"]
}
[root@server4 docker]# 

在这里插入图片描述
先禁用docker项目,避免发生影响。
我们还需要在server4上做本地解析,并且给harbor仓库做认证:

[root@server4 docker]# cat /etc/hosts
172.25.254.1	server1
172.25.254.2	server2
172.25.254.3	server3	reg.caoaoyuan.org		#这里
[root@server2 docker]# scp -r certs.d server4:/etc/docker/		# 将证书复制过去。

然后我们就可以触发了:

[root@server1 demo]# cat index.html 
ddddddddddddddd			# server上更改代码如下
ddddddddddddddd
ddddddddddddddd
ddddddddddddddd
[root@server1 demo]# git commit -a -m "add index.html v4"

[root@server1 demo]# git push -u origin master

在这里插入图片描述
gitlab接受了。
在这里插入图片描述
jenins构建成功。
在这里插入图片描述
harbor仓库也推送了。
它的整体流程就是:
开发人员git提交代码 --> gitlab仓库 --> jenkins触发构建 --> server6主机进行构建 --> 推送到harbor仓库
实现了自动化。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值