.gitlab-ci.yml关键词完整解析(一)
使用GitLab自带的流水线,必须要定义流水线的内容,而定义内容的文件默认叫做.gitlab-ci.yml
,使用yml的语法进行编写。
目前任务关键词有28个,全局的关键词有10个,两者重叠的有很多。今天我给大家先讲解一下常用的关键词,掌握了这些关键词的用法,你可以编写逻辑严谨,易于扩展的流水线。
任务的28个关键词分别是,
script
, after_script
, allow_failure
, artifacts
, before_script
, cache
, coverage
, dependencies
, environment
, except
, extends
, image
, include
, interruptible
, only
, pages
, parallel
, release
, resource_group
, retry
, rules
, services
, stage
, tags
, timeout
, trigger
, variables
, when
全局的关键词
image,services,before_script,after_script,tags,cache,artifacts,retry,timeout,interruptible
最常任务中最常用的是这七个script
,artifacts
,stage
, when
,tags
,image
,cache
,
下面我先来详细介绍一下这七个关键词,知道了这个七个关键词,一般的流水线随随便便拿下,
script
任务要执行的shell脚本内容,内容会被runner执行,在这里,你不需要使用git clone ....
克隆当前的项目,来进行操作,因为在流水线中,每一个的job的执行都会将项目下载,恢复缓存这些流程,不需要你再使用脚本恢复。你只需要在这里写你的项目安装,编译执行,如
npm install
另外值得一提的是,脚本的工作目录就是当前项目的根目录,所有可以就像在本地开发一样。此外script可以是单行或者多行
单行脚本
job:
script: npm install
多行脚本
job:
script:
- npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
- npm install --registry=http://registry.npm.taobao.org
script是一个job的必填内容,不可或缺。一个job最少有二个属性,一个是job name, 任务名称, 一个就是script。
image
指定一个基础Docker镜像作为基础运行环境,经常用到的镜像有node
nginx
docker
job:
image: node:latest
script: npm install
在上面这个任务中,如果不指定image: node:latest
执行下面的npm install
时会报错,找不到npm
的命令。
image的作用就是给当前任务或者当前流水线设置一个基础环境,有可能是nodejs,也有可能是java, go, php,
可以设置当前流水线的,也可以设置当前任务的。
artifacts
翻译出来这个单词就是制品,一个成品,作用是将流水线过程中的一些文件,文件夹,打包压缩,提供一个外链供人下载,另外还能在后续的job中缓存。
比如我们构建一个前端项目后将dist目录做成一个压缩包,
build:
script:
- npm run build
artifacts:
paths:
- dist/
在这个任务后面运行的任务会自动恢复这个制品,意味着你不用再执行npm run build
来获取编译后的dist
文件了,
在安卓,ios打包的时候,非常有用,因为流水线最终输出的就是一个可下载,可安装的应用。
paths 是用来指定将那些文件,目录放入制品中,
也可以使用exclude关键词,将那些目录,文件排除,支持正则表达式。
此外还有以下几个属性
- paths 文件路径
- exclude 排除的文件
- name 制品名称
- expose_as 在UI页面导出的名称
- untracked 布尔类型,是否将git忽略的文件加到制品中
- when on_success;on_failure;always 何时上传制品
- expire_in 过期时间默认30天
- reports 收集测试报告
build:
script:
- npm run build
artifacts:
paths:
- dist/
exclude:
- binaries/**/*.o
expose_as: 'artifact 1'
name: "$CI_COMMIT_REF_NAME"
untracked: false
expire_in: 2 hrs 20 min
when: on_failure
[tags]()
tags 关键词是用于指定Runner,tags的取值范围是在该项目可见的runner tags中,可以在Setting =>CI/CD => Runner 中查看的到。
要知道,改属性可以设置全局,不设置则默认使用公有Runner去执行流水线。每个任务可以指定一个Runner,可以指定多个标签,但runner却只能一个。以一个为准。tags是在我们注册Runner是配置的,后续也可以更改。
install:
tags:
- hello-vue
- docker
script:
- npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
- npm install --registry=http://registry.npm.taobao.org
cache
缓存是将当前工作环境目录中的一些文件,一些文件夹存储起来,用于在各个任务初始化的时候恢复。避免多个下载同样的包,能够大大优化流水线效率。在前端项目中,我们经常把node_modules缓存起来,这样一条流水线都可以使用这些下载好的包。在java项目中经常把maven下载的包缓存起来。以备后用
cache下的参数有
- paths 当前工作环境下的目录
- key 存储的key,key不变不会重新生成缓存,
- :key:prefix 使用一些文件制作成文件hash值,当做key的一部分,
- untracked 是否缓存git忽略的文件
- when 定义何时存储缓存 on_success;on_failure;always
- policy 缓存是否要在job完成后重新上传
缓存可以设置流水线全局,也可以在job中设置
cache:
key: hello-vue-cache
paths:
- node_modules
cache:
key:
files:
- Gemfile.lock
- package.json
paths:
- vendor/ruby
- node_modules
stage
stage 是阶段的意思,用于归档一部分的job,按照定义的stage顺序来执行。
默认的stage有build,test,deploy, 此外还有两个特殊的.pre 和 .post
job执行的顺序不是按照编写的顺序,大体上是按照stage定义的顺序来执行的,注意是大体,也有例外的情况。
stages:
- build
- test
- deploy
job 0:
stage: test
script: echo 'tets'
job 1:
stage: build
script: echo 'build'
由于build
在test
之前所有会指向job1
这个任务,后指向job0
任务
when
when关键字是实现在发生故障或尽管发生故障时仍能运行的作业。比如你要在任务失败后需要触发一个job,
或者你需要手动执行任务,或者当你一个任务执行成功后,执行另一个任务.
- on_success 所有任务执行成功后
- on_failure 当至少一个任务失败后
- always 执行作业,而不考虑作业在早期阶段的状态。
- manual 手动执行任务
- delayed 延迟执行任务
- never
在rules
中不排除执行的任务
在workflow:rules
不允许的流水线
only/except
only/except 是规定当前job的可见状态,一个项目有很多分支,tag,我们的流水线,为了对特定的分支,特定的tag执行不同的job,这里就要使用only和except
在任务上加上这一段代码,就表明当前任务只有在master分支可以运行
only:
- master
也可以根据当前的代码变动是合并,还是推送,还是使用API来触发的。
如果一个任务没有only属性,那默认就是
only: ['branches', 'tags']
操作分支或者tags都会触发流水线。
写在最后
懂了以上这些关键词,那就不难写出一条好的流水线。
遇到流水线问题,可以私聊我。demon_0212
关注我,后续还有更多优质精讲文章。
- 分享
- 举报
-
浏览量:14005次2020-12-06 17:48:56
-
浏览量:21000次2020-12-10 16:21:29
-
浏览量:2727次2022-05-26 16:24:43
-
浏览量:1919次2022-03-03 19:30:43
-
浏览量:1410次2023-02-02 13:12:40
-
浏览量:412次2023-10-27 10:03:42
-
浏览量:3187次2020-11-28 17:56:08
-
浏览量:6226次2022-10-09 14:26:10
-
浏览量:1581次2019-07-01 10:31:07
-
浏览量:2546次2019-08-02 16:24:49
-
浏览量:1655次2018-04-02 10:18:44
-
浏览量:385次2023-10-30 16:16:11
-
浏览量:1633次2022-01-31 09:00:13
-
浏览量:3404次2017-12-02 20:03:47
-
2020-10-21 14:00:04
-
2023-01-13 11:35:13
-
浏览量:16559次2021-12-21 09:00:13
-
浏览量:1021次2023-01-29 11:28:01
-
浏览量:1607次2020-03-19 10:09:21
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
这把我C
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明