原文來自我自己的部落格月泉的部落格
本來想寫一篇企業級通用的CI/CD但是太麻煩了,涉及的知識點廣度較多,我先寫個簡易的引子吧,以後看有沒有機會分享一下近期研究出來的企業級比較通用的CI/CD
方案,以一個SpringBoot的專案做示例。
如果你有什麼好的方案的話可以加微信或者郵箱我們共同探討一下
釋出流程如圖

我的伺服器環境是
- CentOS7
- Docker 18.03.0-ce
- DockerCompose 1.19.0
本次方案所使用的技術有
- Docker
- Docker Compose
- Jenkins
為了方便,我寫做了一個docker-jenkins給顆小心心就可以了~
這裡演示起見,為了方便我直接使用GitLab的倉庫,這樣大家都不用去建立自己的Git倉庫,可以很快速方便的體驗這份簡易的持續整合方案,但這樣做有個缺點就是如果你沒有做內網對映或者是沒有單獨的伺服器的話,你無法使用Git的WebHook訪問到你的Jenkins伺服器的介面

建立一個倉庫,然後將專案推送至該倉庫,這個不用寫在文章裡了吧,應該都會。
好,開始進入正題,進入正題之前請確保你已經安裝了docker
和docker-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
檢查下容器執行起來了沒有

然後
docker logs 容器ID
複製程式碼
注意我紅色框起來的區域,如果沒有的話,也沒有出現異常的話,請等待一下,然後複製那一串加密的字元
如我的是:61cfaad2c6a94b7ebb54deafac051150

http://伺服器IP:8080/
我在docker-compose.yml
檔案中配置了埠是8080的對映如果你的被佔用或者你想更換埠的話,請自行更改
將複製的那串祕鑰貼進去,點繼續

直接點這個

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

建立一個賬號

然後進入控制檯,系統管理=》管理外掛,然後選擇可選外掛,安裝以下外掛,利用右上角的過濾
- Publish Over SSH
- Gitlab
- Gitlab Hook
- Maven Integration


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

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

配置你的Git倉庫

構建觸發器選這個

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

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

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

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

我的pom.xml外掛配置如下

然後設定

新增一個


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

先進入Docker
容器內生成執行ssh-keygen
生成SSH祕鑰對,如果你確定要用這套流程的話,請將~/.ssh
掛載,不然每次重啟都會丟失 = =
docker exec -it 容器ID bash
ssh-keygen
複製程式碼
然後再將生成的公鑰加到你的應用伺服器中去,然後再到應用伺服器下建立一個目錄為releases

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

我應用伺服器的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配置

配置這裡

這裡的內容填


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

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


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