簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

月泉發表於2018-03-28

原文來自我自己的部落格月泉的部落格

本來想寫一篇企業級通用的CI/CD但是太麻煩了,涉及的知識點廣度較多,我先寫個簡易的引子吧,以後看有沒有機會分享一下近期研究出來的企業級比較通用的CI/CD方案,以一個SpringBoot的專案做示例。

如果你有什麼好的方案的話可以加微信或者郵箱我們共同探討一下

釋出流程如圖

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

我的伺服器環境是

  • CentOS7
  • Docker 18.03.0-ce
  • DockerCompose 1.19.0

本次方案所使用的技術有

  • Docker
  • Docker Compose
  • Jenkins

為了方便,我寫做了一個docker-jenkins給顆小心心就可以了~

這裡演示起見,為了方便我直接使用GitLab的倉庫,這樣大家都不用去建立自己的Git倉庫,可以很快速方便的體驗這份簡易的持續整合方案,但這樣做有個缺點就是如果你沒有做內網對映或者是沒有單獨的伺服器的話,你無法使用Git的WebHook訪問到你的Jenkins伺服器的介面

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

建立一個倉庫,然後將專案推送至該倉庫,這個不用寫在文章裡了吧,應該都會。

好,開始進入正題,進入正題之前請確保你已經安裝了dockerdocker-compose 首先建立一個jenkins資料夾 然後將我GayHub倉庫的docker-compsoe.yml下下來,為了方便我已經將映象提交到了Docker倉庫,如果你沒有配置加速或者其它的一些方式的話,你可以自行下載Dockerfile檔案進行build

mkdir jenkins && cd jenkins

wget https://raw.githubusercontent.com/yuequan1997/docker-jenkins/master/docker-compose.yml

docker-compose up -d
複製程式碼

使用docker ps檢查下容器執行起來了沒有

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

然後

docker logs 容器ID
複製程式碼

注意我紅色框起來的區域,如果沒有的話,也沒有出現異常的話,請等待一下,然後複製那一串加密的字元

如我的是:61cfaad2c6a94b7ebb54deafac051150

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab
開啟瀏覽器輸入:http://伺服器IP:8080/我在docker-compose.yml檔案中配置了埠是8080的對映如果你的被佔用或者你想更換埠的話,請自行更改

將複製的那串祕鑰貼進去,點繼續

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

直接點這個

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

等它安裝完,同時你也可以使用dokcer logs命令來檢視當前執行的控制檯

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

建立一個賬號

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

然後進入控制檯,系統管理=》管理外掛,然後選擇可選外掛,安裝以下外掛,利用右上角的過濾

  • Publish Over SSH
  • Gitlab
  • Gitlab Hook
  • Maven Integration

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab
安裝好以後,回到控制檯,新建一個任務
簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

因為我專案是使用maven構建也安裝了maven外掛,所以直接選

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

在General選項中,我配置了保留10箇舊的構建

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

配置你的Git倉庫

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

構建觸發器選這個

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

然後點高階,這裡生成了一個祕鑰,然後只允許master分支觸發Webhook構建

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

然後配置build,它會詢問你的maven配置這時候點連結進去配置一下

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

我這裡為了簡單,沒有去配地址,用的自動安裝,如果不想自動安裝可以去掉這個選項然後輸入MAVEN_HOME就可以了

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

配置好了後回來,我的配置內容如下,我是使用了docker-maven-plugin外掛來做的映象編譯和推送

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

我的pom.xml外掛配置如下

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

然後設定

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

新增一個

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab
簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

= = 去系統管理=》系統設定,新增個SSH Server

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

先進入Docker容器內生成執行ssh-keygen生成SSH祕鑰對,如果你確定要用這套流程的話,請將~/.ssh掛載,不然每次重啟都會丟失 = =

docker exec -it 容器ID bash
ssh-keygen
複製程式碼

然後再將生成的公鑰加到你的應用伺服器中去,然後再到應用伺服器下建立一個目錄為releases

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab
配置完後可以點選Test Configuration進行測試

設定完後繼續回到任務中進行配置

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

我應用伺服器的deploy.sh指令碼內容如下

docker pull registry.cn-hangzhou.aliyuncs.com/mitchell/eureka-server:latest
docker stop eureka-server
docker rm eureka-server
docker run --name eureka-server -p 9001:9001  -d registry.cn-hangzhou.aliyuncs.com/mitchell/eureka-server:latest
複製程式碼

然後儲存後進行Gitlab的WebHook配置

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

配置這裡

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

這裡的內容填

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab
簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

填好後點add WebHook新增成功 接著,我用的是Docker映象推送,我需要在jenkins的宿主機中去登入一次我Docker的私有倉庫,然後在修改下docker-compose.yml檔案將/root/.docker/config.json對映到jenkins容器中去,映象才能推送到我的倉庫中去,否則會沒有許可權,因為docker-maven-plugin1.0的版本以後會預設的去讀你的Docker配置,來進行倉庫的推送,這裡我演示是用的阿里雲的映象倉庫,如果不想自己搭的話也可以去使用阿里雲。

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab

我推送到master分支,如果你是內網的話 = = git訪問不到你的jenkins機器的話,你自己點立即構建

簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab
開始了自動構建
簡易的微服務持續整合方案,SpringBoot+Docker+Jenkins+Gitlab
等它構建完就可以了~~

還有一些改進的地方,將maven的倉庫對映宿主機上去,這樣每重啟就不用再重新下包了,該流程是一個很簡易的流程給大家一個引子但也滿足一些需求,想要更加靈活能更加響應複雜的業務場景的話,可以去了解jenkins piplinesalave這個就不在文中提及了涉及知識的廣度會比較多

相關文章