1. 程式人生 > 其它 >企業DevOps之路:Jenkins 整合 Harbor 自動釋出映象

企業DevOps之路:Jenkins 整合 Harbor 自動釋出映象

1. 概述

在實際生產中,如果進行手動釋出映象到 Harbor,那麼實在太 low 了。實際中,一般會結合 Jenkins 的流水線,進行自動構建和釋出。

 

 

大致流程說明:

  • 開發人員每天把程式碼提交到 Gitlab 程式碼倉庫

  • Jenkins 從 Gitlab 程式碼倉庫中拉取專案原始碼,進行編譯並打成 jar 包;然後構建成 Docker 映象,將映象推送到 Harbor 私有映象倉庫

  • Jenkins 傳送 SSH 遠端命令,讓生成部署伺服器從 Harbor 私有映象倉庫中拉取映象到本地;然後建立容器

  • 最後使用者可以訪問到容器

2. Jenkins 指令碼式釋出映象

  • 新建構建任務

新建Item -> 構建一個Maven專案

 

 

  • 配置程式碼倉庫

 

 

 

 

  • 上傳成果物到伺服器

 

 

因 Jenkins 部署在 Windows 作業系統,所以採用批處理指令碼。請根據 Jenkins 部署的作業系統的情況使用 batch command 或者 shell。

C:\jenkins\pscp.exe -r -l root -pw root %WORKSPACE%/zwt-pestilence/zwt-pestilence-web/target/zwt-pestilence-web-RELEASE.jar 192.168.10.8:/home/huangjinjin/software/springdocker
  • 釋出映象

 

 

cd /home/huangjinjin/software/springdocker
docker build -t zwt:v1.0 .
docker login -u admin -p Harbor123 192.168.10.8
docker tag zwt:v1.0 192.168.10.8/omg/zwt:v1.0
docker push 192.168.10.8/omg/zwt:v1.0
  • 建立 Dockerfile

構建後的 jar 上傳到如下路徑

/home/huangjinjin/software/springdocker

所以在該路徑下建立 Dockerfile 檔案,內容如下:

FROM openjdk:8-jre-slim
MAINTAINER huangjinjin "[email protected]"
ENV PARAMS=""
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /servers
ADD zwt-pestilence-web-RELEASE.jar app/zwt-pestilence-web-RELEASE.jar
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /servers/app/zwt-pestilence-web-RELEASE.jar $PARAMS"]

Dockerfile  檔案的內容根據實際專案情況進行修改。

  • 構建並驗證

執行 Jenkins 任務

 

 

登入 Harbor 檢視是否推送映象到 Harbor 映象倉庫成功

 

 

3.  Jenkins 外掛式釋出映象

  • 安裝 CloudBees Docker Build and Publish 外掛

Manage Jenkins -> Manage Plugins

 

 

  • 新增憑證

Manage Jenkins -> Manage Credentials

 

 

建立一個 Harbor 的賬密憑證。

  • 構建增加 Docker Build and Publish

 

 

在點選高階選項中可以設定

  1. Build Context:構建上下文路徑

  1. Dockerfile Path:Dockerfile 檔案的路徑

根據實際情況配置,配置如下:

 

 

經過以上設定,即可進行 Jenkins 任務執行,構建映象。

4. 附:開啟Docker 的 Remote API 訪問 2375埠

  • Docker 常見埠

2375:未加密的docker socket,遠端root無密碼訪問主機2376:tls加密套接字,很可能這是您的CI伺服器4243埠作為https 443埠的修改2377:群集模式套接字,適用於群集管理器,不適用於docker客戶端5000:docker註冊服務4789和7946:覆蓋網路

  • 開啟配置

方法一(該方法沒有驗證通過)

vi /etc/default/docker

加入下面一行

DOCKER_OPTS="-H tcp://0.0.0.0:2375"

修改 /usr/lib/systemd/system/docker.service 配置檔案

EnvironmentFile=-/etc/default/docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_OPTS

重啟docker即可

systemctl daemon-reload
systemctl restart docker

這種簡單配置讓 Docker Daemon 把服務暴露在 tcp 的 2375 埠上,這樣就可以在網路上操作 Docker 了。Docker 本身沒有身份認證的功能,只要網路上能訪問到服務埠,就可以操作 Docker。

方法二

/usr/lib/systemd/system/docker.service,配置遠端訪問。

產生/usr/lib/systemd/system/docker.service配置檔案

systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

在 [Service] 這個部分的 ExecStart,加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

vi /usr/lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重啟

systemctl daemon-reload
systemctl restart docker

方法三

修改/etc/docker/daemon.json的配置

vi /etc/docker/daemon.json

{
 "hosts": ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"]
}

"tcp://0.0.0.0:2375":tcp socket,表示允許任何遠端客戶端通過 2375 埠連線 Docker Daemon。

"unix:///var/run/docker.sock":unix socket,本地客戶端將通過這個來連線 Docker Daemon。

修改配置後,然後讓 Docker 重新讀取配置檔案,並重啟 Docker 服務

systemctl daemon-reload
systemctl restart docker

在啟動時,可能報如下錯誤

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

是因為 Docker 的 socket 配置 hosts 出現了衝突。解決辦法是編輯/usr/lib/systemd/system/docker.service配置檔案,

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 修改為 ExecStart=/usr/bin/dockerd;再次啟動即可。

檢視 docker 程序

[root@slaver2 ~]# ps -ef| grep docker
root      44221      1  1 18:16 ?        00:00:06 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

Docker 守護程序開啟一個 HTTP Socket,才能實現遠端通訊。

  • 驗證

-H 為連線目標主機 Docker 服務

檢視 Docker 版本

docker -H tcp://192.168.10.8:2375 version

檢視映象包

docker -H tcp://192.168.10.8:2375 images