基於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) 失敗

發佈流程圖如下:

image.png

安裝部署

添加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 重啓服務


註冊

註冊之前需要先獲取到註冊令牌

  1. specific令牌位置爲: gitlab 項目 -> 設置 -> CI / CD -> Runners 設置

image.png

share runner令牌位置爲:Admin Area -> Runners設置

image.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_dircache_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
  tags:
  - report
  script:
  - docker run -d -v $(pwd)/target:/opt/tomcat-8.5/webapps -p 8099:8080 --name=xxxx  public/tomcat-8.5
  only:
  - master

#手動部署階段

deploy-job:
  stage: deploy
  tags:
  - report
  only:
  - master
  environment:
  name: $report_v
  url: $report_url
  script:
  - 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文件中指定,這裏是爲了安全考慮配置在了外面。

image.png

在項目的根目錄寫好.gitlab.-ci.yml腳本後就會自動觸發構建部署


image2019-12-2_12-42-54.png?version=1&modificationDate=1575261774000&api=v2

我們在jobs裏面可以看到執行的狀態,是否執行成功或者報錯。

手動執行部署

需要在手動執行的階段添加參數

when: manual

這裏可以看到build_job階段任務已經執行成功,test_job階段任務等待手動執行部署。


image2019-12-9_10-53-39.png?version=1&modificationDate=1575860019578&api=v2

點擊test_job狀態可以查看到執行過程;如果有報錯,這裏也可以顯示報錯信息。

image2019-12-9_10-55-20.png?version=1&modificationDate=1575860120897&api=v2

接下來我們手動執行部署test_job階段任務。

image2019-12-9_10-56-26.png?version=1&modificationDate=1575860186324&api=v2

執行後刷新下,就可以看到已經執行成功了。

image2019-12-9_10-56-59.png?version=1&modificationDate=1575860219928&api=v2

上面我們在.gitlab-ci.yml中配置了回滾和手動執行部署任務;接下來我們看看回滾。

回滾

在deploy的任務時,添加參數如下:

environment:
  name: lims3_v


我們可以看到這裏有我們自定義的版本,點進去可以看到之前的歷史記錄。

image2019-12-9_11-1-44.png?version=1&modificationDate=1575860504222&api=v2
點擊後面的回滾按鈕即可進行回滾。

image2019-12-9_11-5-23.png?version=1&modificationDate=1575860723668&api=v2


Q&A:

報錯如下:

圖1:

image2019-12-2_13-54-33.png?version=1&modificationDate=1575266073000&api=v2

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


圖2:

image.png

解決方法:

缺少git組件導致,可以重新編譯安裝git


圖3:

image.png

是用戶權限問題:

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章