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環境

