簡介
gitlab-ci全稱是gitlab continuous integration的意思,也就是持續內建。中心思想是當每一次push到gitlab的時候,都會觸發一次腳本執行,然後腳本的内容包括了測試,編譯,部署等一系列自定義的内容。
GitLab-CI
這個是一套配合GitLab使用的持續內建系統,是GitLab自帶的,也就是你裝GitLab的那台伺服器上就帶有的。.gitlab-ci.yml的腳本解析就由它來負責。
GitLab-Runner
這個是腳本執行的承載者,.gitlab-ci.yml的script部分的運作就是由runner來負責的。GitLab-CI浏覽過項目裡的.gitlab-ci.yml檔案之後,根據裡面的規則,配置設定到各個Runner來運作相應的腳本script。這些腳本有的是測試項目用的,有的是部署用的。
.gitlab-ci.yml
這個是在git項目的根目錄下的一個檔案,記錄了一系列的階段和執行規則。GitLab-CI在push後會解析它,根據裡面的内容調用runner來運作。
Pipeline
一次 Pipeline 其實相當于一次建構任務,裡面可以包含多個流程,如安裝依賴、運作測試、編譯、部署測試伺服器、部署生産伺服器等流程。
Stages
Stages 表示建構階段,說白了就是上面提到的流程。我們可以在一次 Pipeline 中定義多個 Stages,這些 Stages 會有以下特點:
所有 Stages 會按照順序運作,即當一個 Stage 完成後,下一個 Stage 才會開始
隻有當所有 Stages 完成後,該建構任務 (Pipeline) 才會成功
如果任何一個 Stage 失敗,那麼後面的 Stages 不會執行,該建構任務 (Pipeline) 失敗
Jobs
Jobs 表示建構工作,表示某個 Stage 裡面執行的工作。我們可以在 Stages 裡面定義多個 Jobs,這些 Jobs 會有以下特點:
相同 Stage 中的 Jobs 會并行執行
相同 Stage 中的 Jobs 都執行成功時,該 Stage 才會成功
如果任何一個 Job 失敗,那麼該 Stage 失敗,即該建構任務 (Pipeline) 失敗
釋出流程圖如下:
添加gitlab官方庫
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash
安裝最新版本的gitlab-runner
yum -y install gitlab-runner
gitlab-runner list 檢視各個 Runner 的狀态
gitlab-runner stop 停止服務
gitlab-runner start 啟動服務
gitlab-runner restart 重新開機服務
注冊之前需要先擷取到注冊令牌
share runner令牌位置為:Admin Area -> Runners設定
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCM581dvRWYoNHLwEzX5xCMx8FesU2cfdGLwATMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL2gTN3MDNzIjMyYDO1cTNx8CX5AjMxkTMwIzLcNXZnFWbp9CXvwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
開始注冊
gitlab-runner register
[root@localhost ~]# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=1784 revision=577f813d version=12.5.0
Running in system-mode.
##輸入你的Gitlab URL
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.60.133/
##輸入注冊令牌來注冊Runner
Please enter the gitlab-ci token for this runner:
SeyTs9_4mKEsYjmfPr4e
##輸入Runner說明
Please enter the gitlab-ci description for this runner:
[localhost]: test
##輸入Runner的tags
Please enter the gitlab-ci tags for this runner (comma separated):
test
Registering runner... succeeded runner=SeyTs9_4
##輸入Runner的執行方式
Please enter the executor: parallels, ssh, virtualbox, docker+machine, custom, docker, docker-ssh, shell, docker-ssh+machine, kubernetes:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
配置檔案儲存在/etc/gitlab-runner/config.toml
配置項類似下面,可能需要手動添加builds_dir和cache_dir這兩個變量,再重新開機服務
[[runners]]
name = "216XX"
url = "https://git.XX.com/"
token = "xxxxxx"
executor = "shell"
builds_dir = "/home/gitlab-runner/builds"
cache_dir = "/home/gitlab-runner/cache"
[runners.cache]
如果要同時處理多個 build 的話,需要進 /etc/gitlab-runner/config.toml 檔案配置 concurrent 它的值為 >1 的值
登出runner:
gitlab-runner unregister --url https://asdf.com/ci --token 43f334f34f34f34f4
或者
gitlab-runner unregister --name NAME 删除特定的Runner
下面我們去需要釋出的項目裡面的根目錄編寫.gitlab-ci.yml腳本進行自動釋出
.gitlab.-ci.yml檔案必須在項目的根目錄進行建立:
stages:
- build
- test
- deploy
#打包階段
build-job:
stage: build
tags:
- report
script:
- mvn clean package -Dmaven.test.skip=true -Pprod
only:
- master
#測試階段
test-job:
stage: test
- docker run -d -v $(pwd)/target:/opt/tomcat-8.5/webapps -p 8099:8080 --name=xxxx public/tomcat-8.5
#手動部署階段
deploy-job:
stage: deploy
environment:
name: $report_v
url: $report_url
- echo $(whoami)
- ssh -p 222 $report_host "/test/apache-tomcat/bin/shutdown.sh"
- ssh -p 222 $report_host "rm -rf /test/tomcat/webapps/*"
- scp -P 222 target/report.war $report_host:/test/tomcat/webapps
- ssh -p 222 $report_host "/test/tomcat/bin/startup.sh"
when: manual
配置.gitlab-ci.yml檔案中用到的變量資訊:CI / CD Settings/Variables,也可以直接在.gitlab.-ci.yml檔案中指定,這裡是為了安全考慮配置在了外面。
在項目的根目錄寫好.gitlab.-ci.yml腳本後就會自動觸發建構部署
我們在jobs裡面可以看到執行的狀态,是否執行成功或者報錯。
需要在手動執行的階段添加參數
<code>when: manual</code>
這裡可以看到build_job階段任務已經執行成功,test_job階段任務等待手動執行部署。
點選test_job狀态可以檢視到執行過程;如果有報錯,這裡也可以顯示報錯資訊。
接下來我們手動執行部署test_job階段任務。
執行後重新整理下,就可以看到已經執行成功了。
上面我們在.gitlab-ci.yml中配置了復原和手動執行部署任務;接下來我們看看復原。
在deploy的任務時,添加參數如下:
environment:
name: <code>lims3_v</code>
我們可以看到這裡有我們自定義的版本,點進去可以看到之前的曆史記錄。
點選後面的復原按鈕即可進行復原。
Q&A:
報錯如下:
圖1:
原因是git版本太低,更新git版本到2.12之後版本即可。
圖2:
解決方法:
缺少git元件導緻,可以重新編譯安裝git
圖3:
是使用者權限問題:
解決方法:chown -R gitlab-runner:gitlab-runner /home/gitlab-runner