整一个 .gitlab.yml
在开发工具类项目中,为了提高项目部署效率,gitlab自带的ci/cd是个很不错的选择。
今天介绍一下 一个 .gitlab.yml 的组成机构和作用。
stages:
- build
- publish
before_script:
- echo ------ ci set registry ------
- npm set registry 'npm_registry'
cache:
paths:
- ./node_modules/
build_job:
stage: build
tags:
- wand-ui
script:
- echo ------ ci build start------
- npm install
- npm run build
- echo ------ ci build end ------
- echo 'token-info'>.npmrc
- node ./publish.js
- echo ------ publish end ------
only:
- master
before_script
before_script用来定义所有job之前运行的命令,包括deploy(部署) jobs,但是在修复artifacts之后。它可以是一个数组或者是多行字符串。
stages
stages用来定义可以被job调用的stages。stages的规范允许有灵活的多级pipelines。
stages中的元素顺序决定了对应job的执行顺序:
- 相同stage的job可以平行执行。
- 下一个stage的job会在前一个stage的job成功后开始执行。
接下仔细看看这个例子,它包含了3个stage:
stages:
- build
- test
- deploy
首先,所有build的jobs都是并行执行的。 所有build的jobs执行成功后,test的jobs才会开始并行执行。 所有test的jobs执行成功,deploy的jobs才会开始并行执行。 所有的deploy的jobs执行成功,commit才会标记为success 任何一个前置的jobs失败了,commit会标记为failed并且下一个stages的jobs都不会执行。 这有两个特殊的例子值得一提:
如果.gitlab-ci.yml中没有定义stages,那么job's stages 会默认定义为 build,test 和 deploy。 如果一个job没有指定stage,那么这个任务会分配到test stage。
cache
Gitlab Runner v0.7.0 开始引入。
cache用来指定需要在job之间缓存的文件或目录。只能使用该项目工作空间内的路径。
从GitLab 9.0开始,pipelines和job就默认开启了缓存
如果cache定义在jobs的作用域之外,那么它就是全局缓存,所有jobs都可以使用该缓存。
Jobs
.gitlab-ci.yml允许指定无限量jobs。每个jobs必须有一个唯一的名字,而且不能是上面提到的关键字。job由一列参数来定义jobs的行为。
job_name:
script: // 要执行的脚本
- rake spec
- coverage
stage: test // 定义job stage
only:
- master // 定义一列git分支,并为其创建job
except: // 定义一列git分支,不创建job
- develop
tags: // 定义一列tags,用来指定选择哪个Runner(同时Runner也要设置tags)
- ruby
- postgres
allow_failure: true //允许job失败。失败的job不影响commit状态
tags tags可以从允许运行此项目的所有Runners中选择特定的Runners来执行jobs。
在注册Runner的过程中,我们可以设置Runner的标签,比如ruby,postgres,development。
提到 runner,必须要说明,如果只有 .gitlab.yml 文件却没有 gitlab runner,ci/cd 也是不会执行的。
gitlab runner
有三种配置方式,一般我们采用 Specific Runners 下 Set up a specific Runner manually 就够了。
按照文档提供的流程就可以:
Install GitLab Runner Specify the following URL during the Runner setup: https://git.guahao-inc.com/ Use the following registration token during setup: 9PN8vkZezz1BuAVQcskp Start the Runner! 具体配置中出现的问题后面补上。