image
这是一个全局关键字,如果流水线的执行器是使用docker来运行的话,那可以指定docker中的docker镜像。如果执行器是shell的话,那该关键字是无用的,即便机器中已近安装了docker的环境,该关键字可以在全局或者某一个job中使用都可以。
可以将其放在顶部,则这个镜像会成为所有job的默认环境。或者加一个default关键字类似:
image: node:alpine
default:
image: node:alpine
上述表会在所有job执行之前安装node:alpine镜像。当然有可能流水线中若干的job其镜像不一定一样,也可以在每个job中各自添加镜像
job_name:
image: node:latest
上述表示的就是在job_name这个任务中,会安装nodejs官方镜像来构建。
也可以是一个完整的镜像地址
job_name:
image:registry.example.com/my-group/my-project/ruby:2.7
上述表示在job_name中会使用ruby2.7的镜像
当然有时会全局的镜像和job内种的镜像同时存在,此时job中的镜像会覆盖全局的默认镜像。例如:
default:
image: ruby:3.0
rspec:
script: bundle exec rspec
rspec 2.7:
image: registry.example.com/my-group/my-project/ruby:2.7
script: bundle exec rspec
在这个例子中ruby:3.0的镜像是所有流水线任务的默认镜像,但在rspec 2.7这个job中并没有使用默认的,而是job内的ruby:2.7会覆盖全局的ruby:3.0
variables
这是一个全局关键字,可以定义在流水线中的变量,然后在各个地方使用这些变量,类似我们编程时声明的变量一样。
变量的名称可以使用数字,
- 字母或者是下划线,在一些shell执行器中首字符必须是一个字母。
- 这个变量必须是一个字符串
该关键字可以在全局或者某一个job中使用都可以
例子:
variables:
NRM: 'http://npm.dc.xxx-it.com/'
pre:
stage: .pre
script:
- echo $NRM
上述定义了一个变量NRM表一个nrm源,然后在pre job中的.pre阶段打印出这个变量
效果如下:
除了我们自定义的一些变量之外,gitlab runner也提供了一些全局变量。可以使用export关键字打印出有哪些环境变量。
gloable_variables:
script:
- export
使用这些变量的方式也是$+名称
image: node:alpine
variables:
NRM: 'http://npm.dc.xxx-it.com/'
pre:
stage: .pre
script:
- echo $NRM
gloable_variables:
script:
- export
use_gloable_variable:
script:
-echo $CI_COMMIT_AUTHOR
include
全局关键字。可以在本地的gitlab-ci.yml文件中引入其他地方的gitlab-ci.yml的配置文件。
include:local
可以使用include:local来引入同一个仓库同一个分支中的其他配置文件(其他配置文件必须是.yml 或者.ymal扩展名)
例如:
include:
- local: '/templates/.gitlab-ci-template.yml'
include:project
可以通过include:project 来引入同一个gitlab 服务中其他项目中的gitlab-ci.yml配置
主要有下面几部分构成,
- project:表在该gitlab服务器中的项目地址
- file:一个数组,表引入该项目中的哪些文件
- ref:非必须,表该项目中的那个分支。没有就是master(main)
include:
- project: 'my-group/my-project'
ref: main # Git branch
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-project'
ref: v1.0.0 # Git Tag
file: '/templates/.gitlab-ci-template.yml'
- project: 'my-group/my-project'
ref: 787123b47f14b552955ca2786bc9542ae66fee5b # Git SHA
file: '/templates/.gitlab-ci-template.yml'
include:remote
使用include:remote 可以通过一个完整的URL地址加载远端的gitlab-ci.yml的配置文件。
远端的配置文件使用HTTP/GTTPS 的GET请求可以获取的到
include:
- remote: 'https://gitlab.com/example-project/-/raw/main/.gitlab-ci.yml'
这个关键字用得好的话非常有用,特别是在一些需要横向对接的团队。可以在业务团队中的项目流水线中直接include一个远端的地址,作为入口,引入远端的配置文件,而对接的公共服务团队只需维护远端真正的配置文件即可。这样,远端的配置文件进行修改或功能添加的时候所有引入这个文件的其他项目都可以同步更新对应的流水线脚本了
其他
查看所有gitlab CI/CD关键字列表