1、retry
作用
用于job失败时重试,最多可以重试2次,
示例
示例中echo语句少一个引号
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "build ok
retry: 2
效果
retry:when
作用
retry可以更细粒度的仅在某些失败时重试
- always:任何失败重试(默认)。
- unknown_failure:当失败原因未知时重试。
- script_failure:脚本失败时重试。
- api_failure:在 API 失败时重试。
- stuck_or_timeout_failure:当作业卡住或超时时重试。
- runner_system_failure:如果 runner 系统出现故障(例如,作业设置失败),请重试。
- runner_unsupported:如果 runner 不受支持,请重试。
- stale_schedule:如果无法执行延迟的作业,请重试。
- job_execution_timeout:如果脚本超过为作业设置的最大执行时间,请重试。
- archived_failure:如果作业已存档且无法运行,请重试。
- unmet_prerequisites:如果作业未能完成先决任务,请重试。
- scheduler_failure:如果 scheduler 未能将作业分配给 runner,请重试。
- data_integrity_failure:如果检测到结构完整性问题,请重试。
示例
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "build ok
retry:
max: 2
when: script_failure
效果
由于是脚本语法错误导致失败,所以job重试
2、parallel
作用
配置并行运行的job数量,值为2~50
示例
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "build ok"
parallel: 3
效果
有3份job在运行,名称按序号排序
parallel: matrix
作用
矩阵命名,不是设定并行的数量,而是根据给定的一组名称创建并行job
示例
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "build ok"
parallel:
matrix:
- PROVIDER: aws
STACK:
- monitoring
- app1
- app2
- PROVIDER: ovh
STACK: [monitoring, backup, app]
- PROVIDER: [gcp, vultr]
效果
job的按照给定的字符串创建
3、rules
作用
rules关键字用于配置流水线运行时运行或不运行某个job,取代了only和except,且与他们不能同时出现在流水线中。可以配置多个条件,流水线运行时从前开始匹配,匹配即停止
rules包含以下规则:
- if
- changes
- exists
- allow_failure
- variables
- when
①rules if
作用
通过条件判断job是否执行,if后面写条件,when后面写动作
示例
当提交分支为dev时自动发布到开发服务器,当提交分支为main分支时手动发布到线上服务器
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "build ok"
deploy_2_dev:
stage: deploy
script:
- echo "deploy 2 dev server"
rules:
- if: $CI_COMMIT_BRANCH == "dev"
when: on_success
deploy_2_online:
stage: deploy
script:
- echo "deploy 2 online server"
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: manual
效果
由于在main分支提交的文件,只执行了deploy_2_online这个job
②rules exists
作用
通过文件是否存在判定job是否执行,可以避免因文件不存在造成的脚本报错
示例
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "build ok"
deploy_job:
stage: deploy
script:
- cat Dockerfile
rules:
- exists:
- Dockerfile
文件不存在效果
文件存在效果
③rules changes
作用
通过检查指定文件的是否有内容改变,判断是否执行job
示例
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "build ok"
deploy_job:
stage: deploy
script:
- cat Dockerfile
rules:
- changes:
- Dockerfile
文件内容未改变效果
文件内容改变效果
参考:
https://docs.gitlab.cn/jh/ci/yaml/#variables
https://www.bilibili.com/video/BV18y4y1S7VC?share_source=copy_web&vd_source=e7cb77928d906ea4d27387974d073399