了解.gitlab-ci.yml
中常用关键字
在你的项目根目录创建一个
.gitlab-ci.yml
文件。它是一个YAML
文件,您可以在其中指定GitLab CI/CD
的指令。内容如下:
在CI
文件中,我们可以对一系列任务做定义,每个任务至少需要包含一条可执行的语句,在 script
定义 Runner
环境可执行的所有语句,每一个任务都会按照定义顺序执行。
# 定义 stages
stages:
- build
- test
# 定义build job
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
# 定义test job
test-job1:
stage: test
script:
- echo "This job tests something"
stages
定义构建任务
stages
关键字用于定义构建场景,可以被构建任务引用定义自己的构建场景,stages定义的顺序也决定了任务执行的顺序,下面给出一个基本的场景示例
# 定义 stages
stages:
- test
- build
- publish
- 首先所有任务的构建场景为 test 的任务全部并行执行
- 接着会执行构建场景为 build 的所有任务
- 最后执行构建场景为 publish 的所有任务
- 其中任何一个任务失败,整个流水线会失败,并且之后的任务不会执行
stages
可以不被定义,那么程序会默认为 test build deploy
三个场景,如果一个任务没有指定自己的 stage
,那么它将默认使用 test
Jobs
Jobs
表示构建工作,表示某个Stage
里面执行的工作。 我们可以在Stages
里面定义多个Jobs
,这些Jobs
会有以下特点:
- 相同
Stage
中的Jobs
会并行执行; - 相同
Stage
中的Jobs
都执行成功时,该Stage
才会成功; - 如果任何一个
Job
失败,那么该Stage
失败,即该构建任务 (Pipeline) 失败
所以,Jobs 和 Stage 的关系图就是:
+------------------------------------------+
| |
| Stage 1 |
| |
| +---------+ +---------+ +---------+ |
| | Job 1 | | Job 2 | | Job 3 | |
| +---------+ +---------+ +---------+ |
| |
+------------------------------------------+
script
用来定义一个任务中需要执行的shell脚本
script:
- npm install
- npm run lint
- npm run build
before_script
定义任何 Jobs 运行前都会执行的命令。
before_script:
- npm install
- echo 'Install successful'
after_script
定义任何 Jobs 运行完后都会执行的命令。
after_script:
- xxxxxx # 通知所有用户完成构建
variables && Job.variables
定义环境变量。 如果定义了 Job 级别的环境变量的话,该 Job 会优先使用 Job 级别的环境变量。
variables:
BUILD_SUCCESS: '打包执行成功'
SUCCESS: 'job执行完成'
# 定义build job
build-job:
variables:
TEST: '测试'
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
- echo ${BUILD_SUCCESS}
- echo ${SUCCESS}
- echo ${TEST}
image
image
关键字允许当前CI
程序基于某个Docker
镜像中运行,当然前提是你的任务指定的tags
必须是以Docker
形式注册的Github Runner
,CI
程序会默认在你本地寻找镜像,如果不存在的话,则会从Docker Hub
拉取。
variables:
BUILD_SUCCESS: '打包执行成功'
SUCCESS: 'job执行完成'
# 定义build job
build-job:
# 以下面这个镜像运行script
image: node:2.8.1
variables:
TEST: '测试'
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
- echo ${BUILD_SUCCESS}
- echo ${SUCCESS}
- echo ${TEST}
only && except
这两个关键字定义任务什么时候将会被创建
only
定义了任务需要执行的所在分支或者标签;except
定义了任务不会执行的所在分支或者标签;
variables:
BUILD_SUCCESS: '打包执行成功'
SUCCESS: 'job执行完成'
# 定义build job
build-job:
# 以下面这个镜像运行script
image: node:2.8.1
variables:
TEST: '测试'
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
- echo ${BUILD_SUCCESS}
- echo ${SUCCESS}
- echo ${TEST}
only:
# 可以指定多个再mester、dev、或者打tag 都会运行该CI工作流
- master
- dev
- tags
# only: 或者可以这么写判断 校验尼的tag符合正则的才会触发
# variables:
# - $CI_COMMIT_TAG =~ /^[0-9]+\.[0-9]+\.[0-9]+(-rc(\..+)?)?$/
except:
- feature/**
两者如果都存在在一个任务声明中,则所需引用将会使用两者交集过滤。 两者均允许使用正则。
tags
指定当前任务适用的 runners, 必须是已经注册过的runner才能指定
variables:
BUILD_SUCCESS: '打包执行成功'
SUCCESS: 'job执行完成'
# 定义build job
build-job:
# 以下面这个镜像运行script
image: node:2.8.1
variables:
TEST: '测试'
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
- echo ${BUILD_SUCCESS}
- echo ${SUCCESS}
- echo ${TEST}
only:
# 可以指定多个再mester、dev、或者打tag 都会运行该CI工作流
- master
- dev
- tags
except:
- feature/**
tags:
- ci-runnner
artifacts
定义
Job
中生成的附件。 当该Job
运行成功后,生成的文件可以作为附件 (如生成的二进制文件) 保留下来,打包发送到GitLab
,之后我们可以在GitLab
的项目页面下下载该附件。
variables:
BUILD_SUCCESS: '打包执行成功'
SUCCESS: 'job执行完成'
FILE_NAME: 'dist.zip'
# 定义build job
build-job:
# 以下面这个镜像运行script
image: node:2.8.1
variables:
TEST: '测试'
stage: build
script:
- npm run build
- cd dist/ && zip -r dist.zip ./* && mv dist.zip ../ && cd -
- echo "Hello, $GITLAB_USER_LOGIN!"
- echo ${BUILD_SUCCESS}
- echo ${SUCCESS}
- echo ${TEST}
only:
# 可以指定多个再mester、dev、或者打tag 都会运行该CI工作流
- master
- dev
- tags
except:
- feature/**
artifacts:
paths:
- ${FILE_NAME}
tags:
- ci-runnner
cache && Job.cache
定义需要缓存的文件。 每个
Job
开始的时候,Runner
都会删掉.gitignore
里面的文件。 如果有些文件(如 node_modules/)
需要多个Jobs
共用的话,我们只能让每个Job
都先执行一遍npm install
。 这样很不方便,因此我们需要对这些文件进行缓存。缓存了的文件除了可以跨Jobs
使用外,还可以跨Pipeline
使用。
stages:
- build
cache:
paths:
- node_modules/
job1:
stage: build
script:
- npm install
- npm run build
job2:
stage: build
script:
- npm install
- npm run test
allow_failure
allow_failure
关键字用于标记一个Job
(作业)是否允许失败。当设置为true
时,如果该Job
失败了,整个流水线(pipeline)的状态仍将被标记为成功(success),而不会影响后续的Jobs
。
stages:
- test
job1:
stage: test
script:
- run_tests.sh
job2:
stage: test
script:
- run_integration_tests.sh
allow_failure: true
dependencies
dependencies
关键字用于定义作业(Job
)之间的依赖关系。它指定了某个作业必须在哪些其他作业完成后才能执行。
variables:
FILE_NAME: dist.zip
stages:
- build
- deploy
build:
stage: build
only:
- tags
script:
- yarn && yarn build
- cd dist/ && zip -r dist.zip ./* && mv dist.zip ../ && cd -
- ls
artifacts:
# expire_in 产物保留多少天
expire_in: 30 days
paths:
- ${FILE_NAME}
tags:
- runner
deploy:
stage: deploy
script:
# - 部署相关命令
- echo "project done"
only:
- tags
# dependencies build 留下来的dist产物
dependencies:
- build
tags:
- runner
以上就是经常使用的一些关键字了,如果不能满足使用可以去官网去查看: 地址