gitlab-ci.yml语法

gitlab-ci

第一节 简介

  自7.12版本开始,GitLab CI使用YAML文件来管理项目配置。此文件存放于项目仓库的根目录,定义了项目该如何构建。

  • Gitlab-CI :Gitlab-CI是GitLab Continuous Integration(Gitlab持续集成)的简称。从Gitlab的8.0版本开始,gitlab就全面集成了Gitlab-CI,并且对所有项目默认开启。只要在项目仓库的根目录添加.gitlab-ci.yml文件,并且配置了Runner(运行器),那么每一次合并请求(MR)或者push都会触发CI pipeline。
  • Gitlab-runner :Gitlab-runner是.gitlab-ci.yml脚本的运行器,Gitlab-runner是基于Gitlab-CI的API进行构建的相互隔离的机器(或虚拟机)。考虑到GitLab Runner的资源消耗问题和安全问题,GitLab Runner不建议和Gitlab安装在同一台机器上。Gitlab Runner分为两种,Shared runners和Specific runners。Specific runners只能被指定的项目使用,Shared runners则可以运行所有开启 Allow shared runners选项的项目。
  • Pipeline :管道,每次commit或MR都会执行一次pipeline构建任务,包含多个阶段如测试、编译。
  • Stage :阶段,每个Pipeline有多个Stage,从上向下执行,前一个执行成功才能执行下一个。
  • Job :任务,CI/CD的最小运行单位,表示在指定Stage下执行的任务工作,可以有多个Job,并行执行。
  • Badges :徽章,当Pipelines执行完成,会生成徽章,你可以将这些徽章加入到你的README.md文件或者你的网站。

第二节 案例

  如下面的两个任务由Runners接管,并由服务器中的runner执行,每个任务独立运行,script可以直接执行系统命令或脚本。

1
2
3
4
5
job1:
script: "execute-script-for-job1"

job2:
script: "execute-script-for-job2"

  一个复杂任务如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# image和services这两个关键字允许使用一个自定义的Docker镜像和一系列的服务,并且可以用于整个job周期。
image: ruby:2.1
services:
- postgres

# before_script用来定义所有job之前运行的命令,包括deploy(部署) jobs,但是在修复artifacts之后。它可以是一个数组或者是多行字符串。
before_script:
- bundle install

# after_script用来定义所有job之后运行的命令。它必须是一个数组或者是多行字符串
after_script:
- rm secrets

# stages用来定义可以被job调用的stages。stages的规范允许有灵活的多级pipelines。
# stages中的元素顺序决定了对应job的执行顺序:
# 1. 相同stage的job可以平行执行。
# 2. 下一个stage的job会在前一个stage的job成功后开始执行。
stages:
- build
- test
- deploy
# 如果.gitlab-ci.yml中没有定义stages,那么job's stages 会默认定义为 build,test 和 deploy。
# 如果一个job没有指定stage,那么这个任务会分配到test stage。

# GItLab CI 允许在.gitlab-ci.yml文件中添加变量,并在job环境中起作用。因为这些配置是存储在git仓库中,所以最好是存储项目的非敏感配置,例如:
variables:
DATABASE_URL:"postgres://postgres@postgres/my_database"

job1:
stage: build
script:
- execute-script-for-job1
only:
- master
tags:
- docker

  下面列出保留字段,这些保留字段不能被定义为job名称:

关键字 是否必须 描述
image 用于docker镜像,查看docker文档
services 用于docker服务,查看docker文档
stages 定义构建阶段
types stages 的别名(已废除)
before_script 定义在每个job之前运行的命令
after_script 定义在每个job之后运行的命令
variable 定义构建变量
cache 定义一组文件列表,可在后续运行中使用

  .gitlab-ci.yml的具体写法,以及关键字含义见: GitLab CI/CD Pipeline Configuration Reference

  关于gitlab为什么使用.gitlab-ci.yml,见: Why we’re replacing GitLab CI jobs with .gitlab-ci.yml


参考:

🔗 通过.gitlab-ci.yml配置任务
🔗 CI/CD examples
🔗 gitlab-ci配置详解(一)