Gitlab的CI/CD學習(二) —— .gitlab-ci.yml文件

簡介

背景

目前市面上常用的自動化部署的工具比較常見的是Jenkins,但是使用過程中,總會遇到各種奇奇怪怪的錯誤,很難定位問題所在;今天我要介紹的gitlab中的CI/CD功能,個人覺得部署起來更加簡單,有效,易排查,可視化界面也更加整潔~

.gitlab-ci.yml

在前面文章中我們知道了整個Gitlab的CI/CD流程,那我們就在這裏介紹以下在流程中,起到工作式指令的配置文件.gitlab-ci.yml文件;

其核心作用是:將它放置於項目倉庫的根目錄,則倉庫提交合並後,則會根據該配置文件進行一系列工作

案例

該配置文件爲yaml文件,所以一定要注意空格層級。

# 定義 stages
stages:
  - package #打包
  - build #構建docker鏡像
  - run #運行docker

variables:
  TAG: microservice #鏡像名稱

# job
# 打包
package:
  stage: package
  script:
    - mvn clean package -Dmaven.test.skip=true
    - cp ./target/*.jar /home/gitlab-runner/docker_project/microservice.jar
  only:
    - master

# 構建鏡像
docker-build:
  stage: build
  script:
    - cd /home/gitlab-runner/docker_project
    - docker build -t $TAG .
  when: manual  #手動
  only:
    - master
docker-build-log:
  stage: build
  script:
    - echo "test"
  when: manual  #手動
  only:
    - master

# 運行容器
decker-run:
  stage: run
  script:
    - docker rm -f $TAG || true
    - docker run -d --name $TAG -p 1883:8080 $TAG
  when: manual #手動
  only:
    - master

相關配置參數介紹

其實配置文件中看似配置了很多參數,但其實核心就只有兩個概念: stage 和 job;

stage

表示執行步驟;它和核心體現就是當代碼提交後,需要執行多少步驟,如上例所示:

# 定義 stages
stages:
  - package #打包
  - build #構建docker鏡像
  - run #運行docker

在這裏插入圖片描述
當我的Java代碼提交後,將分爲三步執行:

  1. package首先拉取代碼打包成jar文件;
  2. 構建docker鏡像
  3. 運行docker鏡像

job

job表示每一步執行步驟的工作內容;

package:  // 1
  stage: package // 2
  script: // 3 
    - mvn clean package -Dmaven.test.skip=true
    - cp ./target/*.jar /home/gitlab-runner/docker_project/microservice.jar
  only: // 4
    - master

根據上例所示:

  1. 表示這個job的名稱

  2. 表示該job屬於哪一個stage;一個stage可以有多個job,例子中,我的構建步驟build中,是有兩個job,分別是docker-build 和docker-build-log。而它在gitlab中的呈現方式如下圖:
    在這裏插入圖片描述

  3. 表示該job所執行的命令,可執行所在服務器中的Runner具備權限的所有命令腳本;也可以在服務器中寫好shell腳本,在這執行shell腳本也是可行的。

  4. 表示該job只會在master分支提交合並後纔會出現在CI/CD的流水線中;這樣可區分,每個分支對應的環境不同,執行的Runner不同,則執行的命令/腳本也不同。

gitlab-ci.yml參數列表

值 1 是否必須 描述
script 必須 定義由Runner執行的shell腳本或命令
extends 非必須 定義此作業將繼承的配置條目
image 非必須 需要使用的docker鏡像,請查閱該文檔
services 非必須 定義所需的docker服務,請查閱該文檔
stage 非必須 定義一個工作場景階段,默認是test
type 非必須 stage的別名,不贊成使用
variables 非必須 在job級別上定義的變量
only 非必須 定義job所引用的git分支
except 非必須 定義job所不適用的git分支
tags 非必須 定義job所適用的runner,tags爲runner標籤
allow_failure 非必須 允許任務失敗,但是如果失敗,將不會改變提交狀態
when 非必須 定義了job什麼時候執行,可以是on_success、on_failure、always和manual
dependencies 非必須 定義了該job依賴哪一個job,如果設置該項,可以通過artifacts設置
artifacts 非必須 工件,在依賴項之間傳遞的東西,類似cache,但原理與cache不同
cache 非必須 定義需要被緩存的文件、文件夾列表
before_script 非必須 覆蓋在作業之前執行的腳本或命令
after_script 非必須 覆蓋在作業之後執行的腳本或命令
environment 非必須 定義讓job完成部署的環境名稱
coverage 非必須 定義job設置代碼覆蓋率
retry 非必須 定義job失敗後的自動重試次數

其他相關文章

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