Stage
# Stage介绍
- type:
Job
|Array<Job>
|Object<name, Job>
Stage
表示一个构建阶段,可以由一个或者多个 Job
组成,见 Job 介绍。
# 单个 Job
如果一个 Stage
只有一个 Job
,那么可以省掉 Stage
直接书写这个 Job
。
stages:
- name: stage1
jobs:
- name: job A
script: echo hello
可以简化为以下写法
- stages:
- name: job A
script: echo hello
# 串行 Job
当值为数组(有序)时,那么这组 Job
会串行执行。
# 串行
stages:
- name: install
jobs:
- name: job1
script: echo "job1"
- name: job2
script: echo "job2"
# 并行 Job
当值为对象(无序)时,那么这组 Job
会并行执行。
# 并行
stages:
- name: install
jobs:
job1:
script: echo "job1"
job2:
script: echo "job2"
多个 Job
串行、并行可灵活组织。
先串行后并行的示例:
master:
push:
- stages:
- name: serial first
script: echo "serial"
- name: parallel
jobs:
parallel job 1:
script: echo "1"
parallel job 2:
script: echo "2"
- name: serial next
script: echo "serial next"
# name
- type:
String
Stage
名称。
# ifNewBranch
- type:
Boolean
- default:
false
为 true
表示只有当前分支属于新分支(即 CODING_IS_NEW_BRANCH
为 true
)时,才执行此 Stage
。
当同时存在
ifNewBranch
/ifModify
/if
有一个条件满足,此Stage
就会执行
# ifModify
- type:
Array<String>
|String
指定只有相应文件变动时,才执行此 Stage
。
是一个 glob 匹配字符串,或者是一个 glob 匹配字符串数组。
# if
- type:
Array<String>
|String
一个或者多个 Shell 脚本,根据脚本执行的退出程序码(exit code)来判断是否执行此 Stage
。
当退出程序码为 0
时,表示需要执行本步骤。
示例1:判断某个变量的值
master:
push:
- env:
IS_NEW: true
stages:
- name: is new
if: |
[ "$IS_NEW" = "true" ]
script: echo is new
- name: is not new
if: |
[ "$IS_NEW" != "true" ]
script: echo not new
示例2: 判断任务执行的输出
master:
push:
- stages:
- name: make info
script: echo 'haha'
exports:
info: RESULT
- name: run if RESULT is haha
if: |
[ "$RESULT" = "haha" ]
script: echo $RESULT
# env
- type:
Object
同 Pipeline env,只对当前 Stage
生效。
Stage env
优先级比 Pipeline env
高。
# imports
- type:
Array<String>
|String
同 Pipeline imports,只对当前 Stage
生效。
# retry
- type:
Number
- default:
0
失败重试次数,0
表示不重试。
# lock
- type:
Boolean
|Object
给 Stage
设置锁,Stage
执行完后自动释放锁,锁不能跨仓库使用。
表现: 任务 A 获取到锁后,任务 B 再申请锁,将等待锁释放后,才能获取到锁继续执行任务。
lock.key
- type:
String
自定义锁名,默认值为
分支名-流水线名-stage下标
- type:
lock.expires
- type:
Number
- default:
3600
(一小时)
- type:
锁过期时间,过期后自动释放锁,单位“秒”。
lock.wait
- type:
Boolean
- default:
false
- type:
锁被占用是否等待。
lock.timeout
- type:
Number
- default:
3600
(一小时)
- type:
指定等待锁的超时时间,单位“秒”。
例1: lock
是 Boolean
格式
master:
push:
- stages:
- name: stage1
lock: true
jobs:
- name: job1
script: echo "job1"
例2: lock
是 Object
格式
master:
push:
- stages:
- name: stage1
lock:
key: key
expires: 600 # 10分钟
wait: true
timeout: 60 # 最多等待 1分钟
jobs:
- name: job1
script: echo "job1"
# image
- type:
Object
|String
指定当前 Stage
的环境镜像,在当前 Stage
下的所有任务默认都将在这个镜像环境中执行。
image.name
:- type:
String
镜像名,如
node:14
。- type:
image.dockerUser
:- type:
String
指定 docker 用户名,用于拉取指定的镜像。若指定 image 为非公开镜像则必须指定,否则会出现没有权限拉取镜像的情况。
- type:
image.dockerPassword
:- type:
String
指定 docker 用户密码,用于拉取指定的镜像。若指定 image 为非公开镜像则必须指定,否则会出现没有权限拉取镜像的情况。
- type:
如果指定 image
为字符串,则等同于指定了 image.name
。