天天看點

基于gitlab-ci的CICD

簡介

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設定

基于gitlab-ci的CICD

開始注冊

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的CICD

在項目的根目錄寫好.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&amp;A:

報錯如下:

圖1:

原因是git版本太低,更新git版本到2.12之後版本即可。

圖2:

基于gitlab-ci的CICD

解決方法:

缺少git元件導緻,可以重新編譯安裝git

圖3:

基于gitlab-ci的CICD

是使用者權限問題:

解決方法:chown -R gitlab-runner:gitlab-runner  /home/gitlab-runner