這篇具有很好參考價值的文章主要介紹了DevOps系列文章 之 SpringBoot整合GitLab-CI實現(xiàn)持續(xù)集成。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。
在企業(yè)開發(fā)過程中,我們開發(fā)的功能或者是修復(fù)的BUG都需要部署到服務(wù)器上去,而這部分部署操作又是重復(fù)且繁瑣的工作,GitLab-CI 持續(xù)集成為我們解決了這一痛點,將重復(fù)部署的工作自動化,大大的節(jié)省了程序員們的寶貴時間。本文詳細講述了 GitLab-CI 持續(xù)集成的安裝、部署、以及配置。
文中的工具包有需要的話也可以私信博主喲~
一、概述

1.1、什么是CI/CD
CI/CD
?屬于?DevOps
,代表持續(xù)集成、持續(xù)交付/部署。CI/CD 自動化了傳統(tǒng)上將新代碼從提交到生產(chǎn)(例如構(gòu)建、測試和部署)以及基礎(chǔ)設(shè)施配置所需的大部分或全部手動人工干預(yù)。借助 CI/CD ,開發(fā)人員可以對代碼進行更改,然后自動測試并推出以進行交付和部署。以實現(xiàn)停機時間最小化,代碼發(fā)布速度更快。
1.2、持續(xù)集成(CI)
持續(xù)集成是在提交或合并代碼時,自動測試每個更改,并自動啟動構(gòu)建??梢源蟠鬁p少開發(fā)和運維人員的重復(fù)工作,可以在軟件開發(fā)生命周期的更早階段更輕松的發(fā)現(xiàn)并修復(fù)錯誤和安全問題。
1.3、持續(xù)交付(CD)
持續(xù)交付是一種軟件開發(fā)實踐,一般與持續(xù)集成結(jié)合使用,以自動化基礎(chǔ)設(shè)置供應(yīng)和應(yīng)用程序發(fā)布過程。
一旦代碼作為 CI 流程的一部分進行了測試和構(gòu)建,持續(xù)交付將在最后階段接管,以確??梢噪S時部署并將部署所需要的環(huán)境打包在一起。
通過持續(xù)交付,可以隨時將構(gòu)建的軟件部署到生產(chǎn)環(huán)境??梢允謩佑|發(fā)部署,也可以進行自動化部署。
二、CI/CD流水線
2.1、Pipeline

Pipeline 相當于構(gòu)建任務(wù),里面可以包含多個流程,如安裝依賴、運行測試、編譯、部署測試服務(wù)器、部署生產(chǎn)服務(wù)器等流程。
任何提交或合并代碼都可以觸發(fā) Pipeline。
2.2、Stages

Stages 表示構(gòu)建階段,可以在一次 Pipeline 中定義多個 Stages。
Stages 有以下特點:
- 所有 Stages 會按照順序運行,即當一個 Stage 完成后,下一個 Stage 才會開始
- 只有當所有 Stages 完成后,該構(gòu)建任務(wù) (Pipeline) 才會成功
- 如果任何一個 Stage 失敗,那么后面的 Stages 不會執(zhí)行,該構(gòu)建任務(wù) (Pipeline) 失敗
2.3、Jobs

Jobs 表示構(gòu)建工作,表示某個 Stage 里面執(zhí)行的工作。可以在 Stages 里面定義多個 Jobs。
Jobs 有以下特點:
- 相同 Stage 中的 Jobs 會并行執(zhí)行
- 相同 Stage 中的 Jobs 都執(zhí)行成功時,該 Stage 才會成功
- 如果任何一個 Job 失敗,那么該 Stage 失敗,即該構(gòu)建任務(wù) (Pipeline) 失敗
2.4、Runners
Runner 是一個在 GitLab CI/CD 管道中運行作業(yè)的應(yīng)用程序。簡而言之,就是由 Runner 來執(zhí)行這些構(gòu)建任務(wù)。
GitLab Runner 可以安裝到不同的機器上,也可以在容器或 Kubernetes 集群中運行。Runner 在安裝機器上處理作業(yè),在構(gòu)建任務(wù)運行期間并不會影響到 GitLab 的性能。
三、安裝GitLab Runner
3.1、環(huán)境準備
創(chuàng)建目錄
1 |
mkdir -p /usr/local/docker/runner |
1 |
mkdir -p /usr/local/docker/runner/environment |
下載?jdk-8u341-linux-x64.tar.gz
、apache-maven-3.5.3-bin.tar.gz
、settings.xml
、docker-compose
,并將其上傳至?environment
?目錄
1 2 3 4 5 6 7 8 |
$ ll total 197168 drwxr-xr-x 2 root root????? 4096 Dec? 3 20:13 ./ drwxr-xr-x 3 root root????? 4096 Dec? 3 20:13 ../ -rw-r--r-- 1 root root?? 8799579 Dec? 3 20:13 apache-maven-3.5.3-bin. tar .gz -rw-r--r-- 1 root root? 44924928 Dec? 3 20:13 docker-compose -rw-r--r-- 1 root root 148162542 Dec? 3 20:13 jdk-8u341-linux-x64. tar .gz -rw-r--r-- 1 root root???? 10596 Dec? 4 20:13 settings.xml |
settings.xml 中增加了 maven 部署的 server 節(jié)點,否則項目 deploy 時會失敗
3.2、創(chuàng)建Dockerfile
在environment
目錄下創(chuàng)建?daemon.json
1 |
vi /usr/local/docker/runner/environment/daemon.json |
內(nèi)容如下:
1 2 3 4 5 6 7 8 |
{ ?? "registry-mirrors" : [ ???? "https://mirror.ccs.tencentyun.com" ?? ], ?? "insecure-registries" : [ ???? "192.168.110.158:5000" ?? ] } |
-
registry-mirrors
:為鏡像加速地址,這里是使用的騰訊云的鏡像加速地址。
-
insecure-registries
:Docker倉庫的IP。
注意:需要提前搭建Docker 私服(Docker Registry)
在environment
目錄下創(chuàng)建?Dockerfile
1 |
vi /usr/local/docker/runner/environment/Dockerfile |
內(nèi)容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
FROM gitlab /gitlab-runner :v11.0.2 # 修改軟件源 RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > /etc/apt/sources .list && \ ???? echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources .list && \ ???? echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> /etc/apt/sources .list && \ ???? echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> /etc/apt/sources .list && \ ???? apt-get update -y && \ ???? apt-get clean # 安裝 Docker RUN apt-get -y install apt-transport-https ca-certificates curl software-properties-common && \ ???? curl -fsSL http: //mirrors .aliyun.com /docker-ce/linux/ubuntu/gpg | apt-key add - && \ ???? add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" && \ ???? apt-get update -y && \ ???? apt-get install -y docker-ce COPY daemon.json /etc/docker/daemon .json # 安裝 Docker Compose WORKDIR /usr/local/bin COPY docker-compose /usr/local/bin RUN chmod +x docker-compose # 安裝 Java RUN mkdir -p /usr/local/java WORKDIR /usr/local/java COPY jdk-8u341-linux-x64. tar .gz /usr/local/java RUN tar -zxvf jdk-8u341-linux-x64. tar .gz && \ ???? rm -fr jdk-8u341-linux-x64. tar .gz # 安裝 Maven RUN mkdir -p /usr/local/maven WORKDIR /usr/local/maven COPY apache-maven-3.5.3-bin. tar .gz /usr/local/maven RUN tar -zxvf apache-maven-3.5.3-bin. tar .gz && \ ???? rm -fr apache-maven-3.5.3-bin. tar .gz COPY settings.xml /usr/local/maven/apache-maven-3 .5.3 /conf/settings .xml # 配置環(huán)境變量 ENV JAVA_HOME /usr/local/java/jdk1 .8.0_341 ENV MAVEN_HOME /usr/local/maven/apache-maven-3 .5.3 ENV PATH $PATH:$JAVA_HOME /bin :$MAVEN_HOME /bin WORKDIR / |
3.3、創(chuàng)建docker-compose
在runner
目錄下創(chuàng)建?docker-compose.yml
1 |
vi /usr/local/docker/runner/docker-compose .yml |
內(nèi)容如下:
1 2 3 4 5 6 7 8 9 10 |
version: '3.1' services: ?? gitlab-runner: ???? build: environment ???? restart: always ???? container_name: gitlab-runner ???? privileged: true ???? volumes: ?????? - . /config : /etc/gitlab-runner ?????? - /var/run/docker .sock: /var/run/docker .sock |
構(gòu)建啟動
啟動后,會自動進行構(gòu)建
3.4、注冊Runner
需要將每一個項目都注冊 Runner。
進入到我們需要注冊Runner的項目

點擊設(shè)置
->CI/CD
,在右側(cè)找到Runner
,點擊展開

可以看到這個項目的 Runner 的詳細信息,其中注冊令牌是我們接下來注冊 Runner 時必須要用到的

在 GitLab Runner 部署服務(wù)器上執(zhí)行命令
1 |
docker exec -it gitlab-runner gitlab-runner register |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 輸入 GitLab 地址 Please enter the gitlab-ci coordinator URL (e.g. https: //gitlab .com/): http: //192 .168.110.158:8080/ # 輸入 Gitlab-ci token Please enter the gitlab-ci token for this runner: 78qwWqvR9xDc5_BjYpwo # 輸入 Runner 的說明 Please enter the gitlab-ci description for this runner: [cdc79d8453ec]: # 設(shè)置 Tag Please enter the gitlab-ci tags for this runner (comma separated): deploy # 選擇 runner 執(zhí)行器 Registering runner... succeeded???????????????????? runner=78qwWqvR Please enter the executor: kubernetes, docker- ssh , parallels, virtualbox, docker- ssh +machine, docker, shell, ssh , docker+machine: shell Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! |
配置完后,項目中會顯示一個有效可用的 runner

3.4、項目配置
項目中需要添加一個?.gitlab-ci.yml
?文件,用于定義要運行的腳本。
3.4.1、依賴管理模塊
剛剛在my-project-dependencies
項目中配置了 Runner,而?my-project-dependencies
?項目只需要將其部署到?Nexus
私服中,所以此項目的?.gitlab-ci.yml
?文件腳本內(nèi)容就只需要將其deploy
到Nexus
即可。

內(nèi)容如下:
1 2 3 4 5 6 7 |
stages: ?? - deploy deploy: ?? stage: deploy ?? script: ???? - /usr/local/maven/apache-maven-3 .5.3 /bin/mvn deploy |
項目結(jié)構(gòu)圖如下:

提交my-project-dependencies
項目,可以在GitLab看到我們剛剛創(chuàng)建的流水線

如果狀態(tài)一直在運行中
,在設(shè)置里面的 Runner 中,勾選運行沒有標簽的作業(yè)

3.4.2、通用模塊
my-project-common
通用模塊,也需要注冊Runner,這里就不重復(fù)贅述了,參考上文。
通用模塊持續(xù)集成步驟:

.gitlab-ci.yml
?文件內(nèi)容如下:
1 2 3 4 5 6 7 |
stages: ?? - deploy deploy: ?? stage: deploy ?? script: ???? - /usr/local/maven/apache-maven-3 .5.3 /bin/mvn clean deploy |
提交my-project-common
通用模塊,可以在Nexus
中看到上傳的jar
,持續(xù)集成成功。


3.4.3、服務(wù)模塊
my-project-server
項目服務(wù)模塊,同樣需要注冊Runner。
項目服務(wù)模塊持續(xù)集成步驟:

- 打包構(gòu)建Docker鏡像
- 推送Docker倉庫
- 運行容器
- 清理虛懸鏡像
.gitlab-ci.yml
?文件內(nèi)容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
stages: ?? - build ?? - push ?? - run ?? - clean build: ?? stage: build ?? script: ???? - /usr/local/maven/apache-maven-3 .5.3 /bin/mvn clean package -Dmaven. test .skip= true ???? - cp target /my-project-server-1 .0.0-SNAPSHOT.jar docker ???? - cd docker ???? - docker build -t 192.168.110.158:5000 /my-project-server . push: ?? stage: push ?? script: ???? - docker push 192.168.110.158:5000 /my-project-server run: ?? stage: run ?? script: ???? - cd docker ???? - docker-compose down ???? - docker-compose up -d clean: ?? stage: clean ?? script: ???? - docker rmi $(docker images -q -f dangling= true ) |
docker 倉庫地址更改為自己的IP
提交my-project-server
項目服務(wù)模塊,查看構(gòu)建結(jié)果

第一次最后一個步驟構(gòu)建失敗,是因為沒有可刪除的虛懸鏡像,導(dǎo)致刪除失敗,這個不影響
構(gòu)建成功,訪問查詢所有用戶接口:
http://IP:8899/sys-user/get/all

可以訪問Docker倉庫,可以看到剛剛持續(xù)集成推送的鏡像
1 2 |
$ curl 192.168.110.158:5000 /v2/_catalog { "repositories" :[ "my-project-server" ]} 文章來源:http://www.zghlxwxcb.cn/news/detail-649043.html |
到這里,項目的持續(xù)集成就完成啦?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-649043.html
到了這里,關(guān)于DevOps系列文章 之 SpringBoot整合GitLab-CI實現(xiàn)持續(xù)集成的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!