1. 程式人生 > 其它 >.gitlab-ci.yml說明

.gitlab-ci.yml說明

Gitlab官方文件:https://docs.gitlab.com/ee/ci/yaml/README.html

Gitlab CI通過YAML檔案管理配置job,該檔案存放於倉庫的根目錄, 預設名為.gitlab-ci.yml,定義了job應該如何工作。

pipeline:
一個pipeline就是一次完整的構建任務,裡面可以包含多個階段(stages)。

stage:
stages表示任務構建的階段。一次pipeline中允許定義多個stages,這些stages 會有以下特點:

1. 所有 stages 會按照順序執行,即當一個 stage 完成後,下一個 stage 才會開始

2. 只有當所有 stages 完成後,該構建任務 (pipeline) 才會成功

3. 如果任何一個 stage 失敗,那麼後面的 stages 不會執行,該構建任務 (pipeline) 失敗

job:
jobs表示構建工作,表示某個stage裡面執行的工作。 我們可以在stages裡面定義多個jobs,這些jobs會有以下特點:

1. 相同stage中的jobs會並行執行

2. 相同stage中的jobs都執行成功時,該stage才會成功

3. 如果任何一個job失敗,那麼該stage失敗,即該構建任務 (pipeline) 失敗

jobs的定義:

1. 定義了在什麼條件下執行它們的條件

2. 具有任意名稱的頂級元素,並且必須至少包含script

3. 不受定義數量的限制

示例:

job1:
script: "execute-script-for-job1"

job2:
script: "execute-script-for-job2"

上面包含兩個單獨的job,其中每個job執行不同的命令。

每個job都是獨立執行的,可以直接執行命令./configure; make; make install或執行指令碼sh test.sh。jobs由runners獲取並在runners各自的環境中執行。

每個job必須有一個唯一的名稱,但有幾個保留的關鍵字不能用作job名稱:

image

services

stages

types

before_script

after_script

variables

cache

配置引數列表:
一個job被定義為一列引數,這些引數指定了job的行為。下表列出了可用的job引數:

值 是否必須 描述
script yes 由Runner執行的shell指令碼或命令
image no 使用的docker映象
services no 使用的docker服務映象
before_script no 在作業之前執行的指令碼或命令
after_script no 在作業之後執行的指令碼或命令
stages no 一個pipeline的各個階段
stage no 一個job階段,預設是test
only no 限制job什麼時候執行
except no 限制job什麼時候不執行
rules no 指定條件列表去確定一個job的可選屬性以及是否執行該job。不可與only/except一起使用
tags no 指定job適用的runner,tags為runner標籤
allow_failure no 允許job失敗,如果失敗將不會改變提交狀態
when no 指定job什麼時候執行,可以是on_success、on_failure、always和manual
environment no 指定job部署的環境名稱
cache no 在後續執行之間應該快取的檔案列表
artifacts no 要附加到一個job上的檔案和目錄列表
dependencies no 通過提供要從中獲取artifacts的job列表來限制將哪些artifacts傳遞給特定的job
coverage no 設定一個給定job的程式碼覆蓋率
retry no job失敗後的自動重試次數
timeout no 設定優先於專案範圍的job超時時間
parallel no 一個job並行執行的例項數量
trigger no 定義下游pipeline的觸發器
include no 允許該job包含外部YAML檔案
extends no 一個job將繼承的配置項
pages no 上傳job的結果與GitLab Pages一起使用
variables no 在job級別上定義變數
interruptible no 定義一個job在因為新的執行而變得多餘時是否可以取消
設定預設引數:
可以使用default關鍵字將某些引數全域性設定為所有job的預設值,特定於job的配置可以覆蓋預設引數。

下面的job引數可以被設定為預設值:

image
services
before_script
after_script
cache

示例:

default: #指定預設引數
image: ruby:2.5

rspec: #指定特定引數
script: bundle exec rspec

rspec 2.6:
image: ruby:2.6
script: bundle exec rspec

.gitlab-ci.yml示例:
stages:
- pull_code_test
- pull_code_production
- install_deps
- test
- build
- deploy_test
- deploy_production

variables:
PHP_FPM_CONTAINER: lnmp-php-fpm
WORK_DIR: /usr/share/nginx/html/
PROJECT: laravel-demo
GIT_DIR: /mnt/lnmp-docker

# 拉取程式碼
pull_code_test:
stage: pull_code_test
only:
- develop
script:
- cd ${GIT_DIR}/${PROJECT}
- git pull origin develop

pull_code_production:
stage: pull_code_production
only:
- master
script:
- cd ${GIT_DIR}/${PROJECT}
- git pull origin master

# 安裝依賴
install_deps:
stage: install_deps
script:
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} composer install

build:
stage: build
script:
# Run migrations
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan migrate
# Cache clearing
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan cache:clear
# Create a cache file for faster configuration loading
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan config:cache
# Create a route cache file for faster route registration
- docker exec -w ${WORK_DIR}/${PROJECT} ${PHP_FPM_CONTAINER} php artisan route:clear

deploy_test:
stage: deploy_test
script:
- cd ${GIT_DIR}
- docker-compose down && docker-compose build && docker-compose up -d

deploy_production:
stage: deploy_production
script:
- cd ${GIT_DIR}
- docker-compose restart

更多.gitlab-ci.yml的說明請參考官方文件。

原文連結:https://blog.csdn.net/miss1181248983/article/details/102885253