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 [email protected]: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 []:[email protected]

[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倉庫
實現了自動化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章