GitLab CI/CD:.gitlab-ci.yml 文件 (持续更新)
一、.gitlab-ci.yml 文件作用
- 可以定义跑CI时想要运行的命令或脚本
- 可以定义job之间的依赖和缓存
- 可以执行程序部署并定义部署位置
- 可以定义想要包含的其他配置文件和模版
二、一个简单的.gitlab-ci.yml 文件示例
三、.gitlab-ci.yml 文件中的一些关键字
after_script
- 定义在每个job(包括失败的job)之后运行的命令
- 如果job超时或者取消了,after_script 命令就不再执行
allow_failure
- 设置allow_failure:true的job,失败时不影响其他job运行,不影响pipeline运行结果,默认值为false
- allow_failure:exit_codes 可以根据exit_codes判断是否允许job失败,例:
artifacts
- 默认job运行成功后,附加在job的文件或文件夹
- 可以在.gitlab-ci.yml 中通过设置 artifacts:when,指定job在什么状态下会上传 artifacts
- artifacts 文件大小最大支持1G,默认100M,job 结束运行后,可在GitLab job 页面下载对应的 artifacts 文件
- 默认情况下,最近一个 stages 里的 job 会自动下载上一个 stages 中的 artifacts,可以通过 dependencies / needs 关键字控制
- paths 关键字可以指定要把哪个文件放在 artifacts 中
- expire_in 关键字可以指定 artifacts 文件保存时间,默认一个月
dependencies
- 可以指定从哪个 job 中下载 artifacts,如果不想下载任何 artifacts 文件,可以给 dependencies 定义一个空的数组
- 如果job A 中,dependencies 指定的 job B 由于某种原因没有成功上传 artifacts 文件,job A 就会运行失败 (因为 job A 需要的文件找不到了)
artifacts:exclude
- 指定哪些文件不想包含在 artifacts 中
artifacts:expire_in
- 设置 artifacts 保存时间(默认以秒为单位),默认30天
- expire_in 可设置的参数示例:
- '42'
- 42 seconds
- 3 mins 4 sec
- 2 hrs 20 min
- 2h20min
- 6 mos 1 day
- 47 yrs 6 mos and 4d
- 3 weeks and 2 days
- never
artifacts:name
- 定义artifacts文件名,可接受预定义变量,如“$CI_JOB_NAME”
artifacts:paths
- 指定 artifacts 中包含的文件,paths 指定路径下的文件都会包含在 artifacts 中
- paths 参数支持通配符
- 使用 only: tags 可以设置仅为打了 tag 的 pipeline 生成 artifacts 文件
artifacts:public
- 指定游客和匿名用户是否可以获取开放 pipeline 的 artifacts 文件, 默认值为 true
artifacts:reports
- 可以收集 pipeline job 相关的报告:测试报告、代码质量报告、安全检测报告,这些报告会展示在GitLab 合并请求、pipeline、安全仪表板(security dashboards)模块
artifacts:untracked
- untracked 为true时,可以将 .gitignore 中被忽略的文件打包进 artifacts 中(如果在.gitlab-ci.yml 中已设置生成 artifacts ),为 false 时,忽略 .gitignore 中被忽略的文件
artifacts:when
- 指定 job 在什么状态下上传 artifacts 文件
- 可设定值:
- on_success: 默认值,仅当 job 成功时上传 artifacts
- on_failure: 仅当 job 失败时上传 artifacts
- always: 无论 job 什么状态,都会上传 artifacts
retry
-
指定 job 失败时重试次数,最大重试次数:2
-
when 可以指定出现哪些失败时要重试
参数 描述 always 默认值,job 无论什么原因失败都要重试 unknown_failure job 失败原因未知时,重试 script_failure script 运行错误导致 job 失败时重试 api_failure api错误导致job失败时重试 stuck_or_timeout_failure 当job因为某些原因卡住或超时失败时重试 runner_system_failure runner 系统错误导致 job 失败时重试 missing_dependency_failure 找不到依赖导致 job 运行失败时重试 runner_unsupported runner 不支持导致 job 失败时重试 stale_schedule 被延迟的 job 不能运行时重试 job_execution_timeout script 执行超时导致 job 运行失败时重试 archived_failure job 被归档不能运行时重试 unmet_prerequisites job 未完成前置任务导致运行失败时重试 scheduler_failure job 未完成前置任务导致运行失败时重试 data_integrity_failure 检测到数据不完整时重试 示例: