Gitlab官方文檔:https://docs.gitlab.com/ee/ci/yaml/README.htmlphp
Gitlab CI經過YAML文件管理配置job,該文件存放於倉庫的根目錄, 默認名爲.gitlab-ci.yml
,定義了job應該如何工做。html
一個pipeline就是一次完整的構建任務,裏面能夠包含多個階段(stages)。nginx
stages表示任務構建的階段。一次pipeline中容許定義多個stages,這些stages 會有如下特色:laravel
1. 全部 stages 會按照順序運行,即當一個 stage 完成後,下一個 stage 纔會開始 2. 只有當全部 stages 完成後,該構建任務 (pipeline) 纔會成功 3. 若是任何一個 stage 失敗,那麼後面的 stages 不會執行,該構建任務 (pipeline) 失敗
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_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.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
的說明請參考官方文檔。