tags: [转载,gitlab]
categories: [CICD]
前言
转载了关于.gitlab-ci.yml文件的配置参数详解
.gitlab-ci.yml 配置参数
| 关键字 | 描述 |
|---|---|
| script | 必须参数,运行器需要执行的脚本 |
| image | 使用Docker image镜像 |
| services | 使用Docker services镜像 |
| before_script | 作业执行前需要执行的命令 |
| after_script | 作业执行后需要执行的命令 |
| stages | 定义流水线所有的阶段 |
| stage | 定义作业所处流水线的阶段(默认test阶段) |
| only | 限制作业在什么时候创建 |
| except | 限制作业在什么时候不创建 |
| tags | 作用使用的Runner运行器的标签列表 |
| allow_failure | 允许作业失败,失败的作业不影响提交的状态 |
| when | 什么时候运行作业 |
| environment | 作用部署的环境名称 |
| cache | 指定需要在job之间缓存的文件或目录 |
| artifacts | 归档文件列表,指定成功后应附加到job的文件和目录的列表 |
| dependencies | 当前作业依赖的其他作业,你可以使用依赖作业的归档文件 |
| coverage | 作业的代码覆盖率 |
| retry | 作业失败时,可以自动执行多少次 |
| parallel | 指定并行运行的作业实例 |
| trigger | 定义下游流水线的触发器 |
| include | 作业加载其他YAML文件 |
| extends | 控制实体从哪里继承 |
| pages | 上传GitLab Pages的结果 |
| retry | 作业失败时,可以自动执行多少次 |
| variables | 定义环境变量 |
使用说明
script
是作业中唯一必须的关键字参数,是运行器需要执行的脚本
build1:script:- echo "Do your build here"- uname -a
image
指定使用Docker镜像
services
指定使用Docker镜像服务
before_script
用于定义在所有作业之前需要执行的命令,比如更新代码、安装依赖、打印调试信息之类的事情
**
after_script
用于定义在所有作业(即使失败)之后需要执行的命令,比如清空工作空间
| 注意
before_script和script在一个上下文中是串行执行的,after_script是独立执行的,即after_script与before_script/script的上下文环境不同。
- after_script会将当前工作目录设置为默认值。
- 由于after_script是分离的上下文,在after_script中无法看到在before_script和script中所做的修改:
> - 在before_script和script中的命名别名、导出变量,对after_script不可见;
- before_script和script在工作树之外安装的软件,对after_script不可见。
- 你可以在作业中定义before_script,after_script,也可以将其定义为顶级元素,定义为顶级元素将为每一个任务都执行相应阶段的脚本或命令。作业级会覆盖全局级的定义
| | | | —- | —- | —- | | |
stages
stages 定义流水线全局可使用的阶段,阶段允许有灵活的多级管道,阶段元素的排序定义了作业执行的顺序。
- 相同
stage阶段的作业并行运行。 - 默认情况下,上一阶段的作业全部运行成功后才执行下一阶段的作业。
- 默认有三个阶段,
build、test、deploy三个阶段,即构建、测试、部署。 - 如果一个作业未定义
stage阶段,则作业使用test测试阶段。 - 默认情况下,任何一个前置的作业失败了,commit提交会标记为failed并且下一个stages的作业都不会执行
allow_failure
allow_failure可以用于当你想设置一个作业失败的之后并不影响后续的CI组件的时候。失败的作业不会影响到commit提交状态。- 如果允许失败的作业失败了,则相应的作业会显示一个黄色的警告,但对流水线成功与否不产生影响。
下面的这个例子中,job1和job2将会并列进行,如果job1失败了,它也不会影响进行中的下一个阶段,因为这里有设置了 allow_failure: true
job1:stage: testscript:- execute_script_that_will_failallow_failure: truejob2:stage: testscript:- execute_script_that_will_succeedjob3:stage: deployscript:- deploy_to_staging
when
when 关键字用于实现在作业失败时或发生故障时运行的作业when 可以设置以下值:on_success :只有前面的阶段的所有作业都成功时才执行,这是默认值。on_failure :当前面阶段的作业至少有一个失败时才执行。always : 无论前面的作业是否成功,一直执行本作业。manual :手动执行作业,作业不会自动执行,需要人工手动点击启动作业。delayed : 延迟执行作业,配合 start_in 关键字一起作用, start_in 设置的值必须小于或等于1小时,start_in 设置的值示例: 10 seconds 、 30 minutes 、 1 hour ,前面的作业结束时计时器马上开始计时
stage:- build- cleanup_build- test- deploy- cleanupbuild_job:stage: buildscript:- make buildcleanup_build_job:stage: cleanup_buildscript:- cleanup build when failedwhen: on_failuretest_job:stage: testscript:- make testdeploy_job:stage: deployscript:- make deploywhen: manualcleanup_job:stage: cleanupscript:- cleanup after jobswhen: always
说明:
- 只有在
build_job构建作业失败时,才会执行cleanup_build_job作业。 - 需要在GitLab Web界面手动点击,才能执行
deploy_job部署作业。 - 无论之前的作业是否成功还是失败,
cleanup_job清理作业一直会执行
cache
GitLab Runner v0.7.0 引入 cache 缓存机制。cache 缓存机制,可以在全局设置或者每个作业中设置。
从 GitLab 9.0 开始, cache 缓存机制,可以在不同的的流水线或作业之间共享数据。
从 GitLab 9.2 开始, 在 artifacts 工件之前恢复缓存。cache 缓存机制用于指定一系列的文件或文件夹在不同的流水线或作业之间共享数据,仅能使用项目工作空间( project workspace )中的路径作为缓存的路径。如果 ``cache 配置的路径是作业工作空间外部,则说明配置是全局的缓存,所有作业共享
artifacts
artifacts用于指定在作业成功、失败、或者一直等状态下时,一系列的文件或文件夹附加到作业中。artifacts可以称为工件``或者 ``归档文件。- 作业完成后,工件被发送到GitLab,可以在GitLab Web界面下载。
- 默认情况下,只有成功的作业才会生成工件。
- 并不是所有的
executor执行器都支持工件
variables
- 在
.gitlab-ci.yml配置文件中可以通过variables关键字配置全局变量或者作业级的局部变量。 - 当
variables关键字使用在作业层级时,它会覆盖全局变量或预定义变量。 - 可以在
variables关键字中定义非敏感性配置。 - 全局变量可以在各个作业中作业,而作业级别的局部变量只能在该作业中使用。
- 可以在GitLab WEB界面定义一些敏感性配置变量,或者可能变动的变量。
- 在
script中使用export可以导出当前可用的变量信息。 - 作业内部修改全局变量只对当前作用生效,不会影响其他作业。
- 可以使用赋值语句对全局变量或局部变量进行重新赋值
only 和 except
only 和 except 用于在创建作业时对作业的限制策略。
only定义了哪些分支或标签(branches and tags)的作业会运行except定义了哪些分支或标签(branches and tags)的作业不会运行
下面是策略规则:
only和except可同时使用,如果在一个作业中同时定义了only和except,则同时onlyexcept进行过滤(注意,不是忽略except条件) 。only和except可以使用正则表达式。only和except允许指定用于过滤forks作业的存储库路径。only和except中可以使用特殊的关键字,如branches、tags、api、external、pipelines、pushes、schedules、triggers、web、merge_requests、chats等。
only 和 except 中可以使用特殊的关键字:
| 关键字 | 描述释义 |
|---|---|
| branches | 当一个分支被push上来 |
| tags | 当一个打了tag标记的Release被提交时 |
| api | 当一个pipline被第二个piplines api所触发调起(不是触发器API) |
| external | 当使用了GitLab以外的外部CI服务,如Jenkins |
| pipelines | 针对多项目触发器而言,当使用CI_JOB_TOKEN, 并使用gitlab所提供的api创建多个pipelines的时候 |
| pushes | 当pipeline被用户的git push操作所触发的时候 |
| schedules | 针对预定好的pipline计划而言(每日构建一类) |
| triggers | 用触发器token创建piplines的时候 |
| web | 在GitLab WEB页面上Pipelines标签页下,按下run pipline的时候 |
| merge_requests | 当合并请求创建或更新的时候 |
| chats | 当使用GitLab ChatOps 创建作业的时候 |
tags
tags 关键字用于指定 GitLab Runner 运行器使用哪一个运行器来执行作业
运行器标签可用于定义不同平台上运行的作业,如 Mac OS X Runner 使用 osx 标签, Windows Runner 使用 windows 标签,而 Linux Runner 使用 linux 标签
