首先需要配置jenkins + gitlab自動觸發更新:https://blog.csdn.net/qq_35887546/article/details/106304046
首先需要在jenkins安裝docker的插件:
準備harbor倉庫:
https://blog.csdn.net/qq_35887546/article/details/105411743
我們將harbor倉庫部署在server3 (172.25.63.3)上。
配置項目test:
添加認證如下:
其中需要在server2安裝docker,可以參考之前的博客,還需要更改docker.sock的權限(jenkins使用的是普通用戶jenkins,因此需要添加權限):
[root@server2 ~]# chmod 777 /run/docker.sock
同時確保server2可以連接上server3部署的harbor倉庫(比如證書,解析等都需要做)。
可以先在server2拉取nginx節省以後的時間。
之後進行保存。
接下來需要進行測試,在git倉庫主機server1創建Dockerfile:
vim Dockerfile
FROM nginx
EXPOSE 80
COPY index.html /usr/share/nginx/html
cat index.html
8888888888
git add Dockerfile
git commit -m "add dockerfile"
git push -u origin master
push後查看gitlab可以看出已經變更:
這個變更就會觸發jenkins的更新:
可以看到構建成功:
現在我們將跳過push取消掉,之後保存手動觸發,可以看到構建成功:
我的編號爲20是因爲中間更改了很多錯誤。
之後在harbor倉庫裏面就可以看到是上傳的鏡像:
這個latest標籤的鏡像始終和最新一次構建的版本相同。
也可以添加構建後的動作。
接下來我們新建一個項目docker:
配置項目docker:
設置在test構建穩定後執行觸發:
其動作爲使用剛剛創建的鏡像構建一個容器:
保存。
手動觸發test項目:
可以看出docker項目構建成功。
我們在docker主機查看:
容器成功運行。
這一系列就部署成功,我們的流程是 用戶通過git將代碼提交到gitlab,gitlab通過其配置的webhook方式觸發jenkins,jenkins調用docker build 插件通過dockerfile創建鏡像然後推送到harbor倉庫上,之後觸發jenkins 裏的項目docker執行docker run命令,創建容器。
完整流程
我們接下來再次進行一遍完整的流程,實驗之前首先需要更改docker項目的構建動作,因爲當運行有同名容器時容器會啓動失敗:
保存後開始實驗:
現在server1更改index.html
文件並提交:
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
Dockerfile index.html README.md
[root@server1 demo]# vim index.html
[root@server1 demo]# cat index.html
8888888888
8888888888
8888888888
8888888888
8888888888
8888888888
[root@server1 demo]# git add index.html
[root@server1 demo]# git commit -m "update index.html"
[master 1cfa872] update index.html
1 file changed, 5 insertions(+)
[root@server1 demo]# git push -u origin master
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 249 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@172.25.63.1:root/demo.git
4c0b5bd..1cfa872 master -> master
Branch master set up to track remote branch master from origin.
push後會更新gitlab:
之後會觸發jenkins項目test和docker的構建:
可以看出都構建成功。
再docker主機訪問容器地址:
[root@server2 ~]# curl 172.17.0.2
8888888888
8888888888
8888888888
8888888888
8888888888
8888888888
查看harbor倉庫:
可以看出鏡像已經更新。
實驗結束。