.gitlab-ci.yml說明

Gitlab官方文檔:https://docs.gitlab.com/ee/ci/yaml/README.htmlphp

Gitlab CI經過YAML文件管理配置job,該文件存放於倉庫的根目錄, 默認名爲.gitlab-ci.yml,定義了job應該如何工做。html


  • pipeline:

一個pipeline就是一次完整的構建任務,裏面能夠包含多個階段(stages)。nginx

  • stage:

stages表示任務構建的階段。一次pipeline中容許定義多個stages,這些stages 會有如下特色:laravel

1. 全部 stages 會按照順序運行,即當一個 stage 完成後,下一個 stage 纔會開始

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

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

  • job:

jobs表示構建工做,表示某個stage裏面執行的工做。 咱們能夠在stages裏面定義多個jobs,這些jobs會有如下特色:git

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

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

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

jobs的定義:docker

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

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

3. 不受定義數量的限制

示例:shell

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各自的環境中執行。ruby

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

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_successon_failurealwaysmanual
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.5rspec:              #指定特定參數
  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的說明請參考官方文檔。

相關文章
相關標籤/搜索