前面已經把harbor搭建好了,也可以向harbor中推送自定義鏡像。
原計劃是在Jenkins這臺服務器上,完成鏡像構建,然后把鏡像推送的harbor倉庫中。現在改變計劃了,Jenkins所在的服務器(192.168.1.10)不負責鏡像構建工作,鏡像構建工作放到harbor所在的服務器(192.168.1.12)上完成。
這樣做的好處是,Jenkins的職責更加清晰,它只是為了完成流水線的事情(自動化工具)。
為了完成整個CI/CD的工作,在harbor所在的服務器上,完成自定義鏡像的構建及將鏡像推送至harbor鏡像倉庫。
實現后的架構如下圖:
docker配置鏡像地址
為了能夠在harbor所在的服務器(192.168.1.12)上完成鏡像的構建和推送。需要修改 /etc/docker/daemon.json 文件內容,把harbor鏡像倉庫地址配置進去。
修改后的文件內容如下:
{
"registry-mirrors": [
? ? "https://registry.docker-cn.com",
? ? "https://docker.1panel.live",
? ? "https://hub.rat.dev",
? ? "http://hub-mirror.c.163.com",
? ? "https://docker.mirrors.ustc.edu.cn",
? ? "https://kfwkfulq.mirror.aliyuncs.com",
? ? "https://k8s.m.daocloud.io"
],
"insecure-registries": ["192.168.1.12:85"]}? ? ? ? ? ? ? ? ? ? ?
"insecure-registries":?["192.168.1.12:85"]是Docker守護進程配置文件daemon.json中的一項配置,用于指定Docker鏡像倉庫。
刷新配置,重啟docker
systemctl daemon-reload
systemctl restart docker
登錄harbor
docker login -u admin -p Harbor12345 192.168.1.12:85
如果出現這個錯誤,則將harbor容器移除,重新啟動一下容器
切換到harbor目錄
cd /usr/local/harbor
執行移除容器命令
docker-compose down
啟動harbor
./install.sh
再次登錄harbor,就成功了。
環境就搭建好了,下面開始配置Jenkins,將目標服務器(192.168.1.11)中的Dockerfile和程序包文件傳輸到harbor所在的服務器(192.168.1.12)。
配置Jenkins
新增SSH服務
點擊高級
填寫配置信息
接著配置當前的任務
在構建后操作的地方,增加新的服務器
第一段SSH Server配置如下圖所示:
在harbor所在服務器(192.168.1.12)上,完成鏡像的構建和推送鏡像到harbor倉庫的工作:
docker build -t 192.168.1.12:85/public/myproject:1.0 /usr/local/
docker login -u admin -p Harbor12345 192.168.1.12:85
docker push 192.168.1.12:85/public/myproject:1.0
命令解讀:
1.構建一個名稱為?192.168.1.12:85/public/myproject:1.0 的鏡像,Dockerfile文件在/usr/local/目錄。
2.登錄到harbor鏡像倉庫,用戶名admin? 密碼Harbor12345? harbor的ip為192.168.1.12,端口85。
3.將構建好的鏡像推送到harbor鏡像倉庫。
第二段SSH Server配置如下圖所示:
在目標服務器(192.168.1.11)上,完成容器的刪除和重新運行的工作。
docker rm -f myproject
docker run -d -p 81:81 --name=myproject 192.168.1.12:85/public/myproject:1.0
命令解讀:
1.刪除已經存在的名稱為?myproject 的容器。
2.生成名稱為?myproject 的容器,用到的鏡像名稱為?192.168.1.12:85/public/myproject:1.0,啟動的端口為81。
以上兩段配置的整體結構如圖:
在目標服務器(192.168.1.11)上,因為要拉取harbor服務器上的鏡像,所以要在docker中配置上遠程鏡像的地址。
操作方法是在/etc/docker/daemon.json文件中配置"insecure-registries":?["192.168.1.12:85"],這樣才能讓docker知道鏡像倉庫地址,否則docker無法拉取鏡像。
Jenkins重新構建
查看構建的控制臺輸出
構建成功。
在目標服務器(192.168.1.11)上,可以看到最新生成的容器。這個過程就是由Jenkins進行驅動的。
訪問應用程序
http://192.168.1.11:81/
復盤
回顧一下,到這一步為止,已經完成的事情:
1.搭建了GitLab代碼倉庫,將本地代碼提交到倉庫。【在192.168.1.10服務器完成】
2.從GitLab代碼倉庫中克隆代碼到Jenkins的工作區【在192.168.1.10服務器完成】
3.完成代碼的編譯和測試代碼【在192.168.1.10服務器完成】
4.打包Spring Boot應用【在192.168.1.10服務器完成】
5.通過SSH傳輸,將Spring Boot應用最終的jar包和Dockerfile文件,上傳到harbor所在的服務器(192.168.1.12)【在192.168.1.12服務器完成】
6.在harbor所在的服務器(192.168.1.12)完成自定義鏡像的構建及把鏡像推送至harbor鏡像倉庫【在192.168.1.12服務器完成】
7.在目標服務器(192.168.1.11)上從harbor鏡像倉庫中找到自定義的鏡像并完成容器啟動。【在192.168.1.11服務器完成】
當前的整體架構如下: