1、gitlab-ci.yml參數列表
值 | 是否必須 | 描述 |
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失敗后的自動重試次數 |
2、gitlab-ci配置示例
# docker鏡像 image: ruby:2.1 # 依賴的docker服務 services: - postgres # 開始執行腳本前所需執行腳本 before_script: - bundle install # 腳本執行完后的鈎子,執行所需腳本 after_script: - rm secrets # 該ci pipeline適合的場景 stages: - build - test - deploy # 定義的任務1 job1: # 場景為構建 stage: build # 所需執行的腳本 script: - execute-script-for-job1 # 在哪個分支上可用 only: - master # 指定哪個ci runner跑該工作 tags: - docker
3、生產環境配置示例
# general settings for all .general: &general stage: deploy #定義構建場景為部署,1.init初始化、2.lint代碼規范、3.unit_test單元測試、4.build構建、5.deploy部署,若其中任務一個步驟出錯,都不會到部署 only: - hotfix/hotfix-conference #指定分支名為緊急修bug,master主開發分支、feature新功能分支、release發布分支、hotfix緊急修bug分支 when: manual #觸發條件為手工執行 tags: - cloud #指定在哪個ci runner工作,雲 image: ip:30050/builder/maven:v1-alpine #青雲maven容器 script: - echo "current branch ****** $CI_COMMIT_REF_NAME ******" - echo "deploy start ..." - /share/script/deploy.sh $CI_JOB_NAME #執行腳本,此腳本路徑是被映射至gitlab runner容器內的路徑,參數為CI_JOB_NAME變量 - echo "deploy done." # general settings for dev .dev: &dev #開發環境 <<: *general #繼承general定義的變量,若重新定義將被覆蓋 tags: - local #本地 image: ip:30050/builder/maven:v1-alpine #本地maven容器 # golive deploy setting .golive: &golive <<: *general #繼承general定義的變量,若再定義將被覆蓋 only: - master #指定分支名 script: - echo "current branch ****** $CI_COMMIT_REF_NAME ******" - echo "deploy golive start ..." - /share/script/golive/deploy.sh $CI_JOB_NAME - echo "deploy golive done." #######定義hotfix/hotfix-conference 分支使用dev使用dev job的配置、test使用 general job的配置 # deploy discovery discovery - dev: *dev discovery - test: *general # deploy services services - dev: *dev services - test: *general ######定義僅master分支使用golive job定義的配置 backend - staging - node1: *golive backend - staging - node2: *golive backend - prod - node1: *golive backend - prod - node2: *golive
4、測試
hotfix/hotfix-conference分支僅能發布dev和test環境
#master分支僅能發布staging和prod環境