功能介绍
流水线定义
流水线是云原生构建的一个载体,用户可以通过编排流水线。实现自动化构建,自动化测试,自动化发布等功能。帮助团队高质量、高效率的完成从开发到上线过程的持续集成工作。
流水线构成
流水线 Pipeline
由阶段 Stage
、任务 Job
组成。每一条流水线中可以定义多个阶段,而每个阶段下支持定义多个任务。
-
Job
用于定义在阶段中需执行的具体任务,比如执行shell 命令
,插件任务
等。 -
Stage
用于定义不同阶段需执行哪些Job
。其中每项Stage
都会按已定义的顺序依次执行,Stage
中的所有Job
可以按照定义顺序或并行执行。
编写流水线
编写流水线本质上是在编写 .coding-ci.yml
配置文件,在其中你可以定义:
- 以何种条件触发流水线,包括:Git Event, Openapi
- 每条流水线具体需要执行的任务
示例文件
流水线示例配置文件:
master: # 监听 master 分支
push: # 代码推送后触发流水线
- name: pipeline-1 # 流水线名称
docker:
image: node:16
stages: # 阶段
- name: build stage
jobs: # 任务
- name: install
script: npm install
- name: unit test
jobs:
- name: test
script: npm run test
- name: pipeline-2
stages:
- name: test stage
jobs:
- name: echo
script: echo hello
上述示例描述了在 master
分支下持续监听 git push
事件。若事件触发,那么就分别执行名字为 pipeline-1
,pipeline-2
两条流水线中的阶段与任务。
具体配置文件的语法说明请参考流水线语法。
配置语法检查和自动补全
推荐在 IDE 中使用语法检查和自动补全插件,减少书写配置文件时的挫败感。效果如下:
配置方法,以 VS Code(Visual Studio Code) 为例:
1、安装 Yaml 插件。
2、配置 json-schema。
在 VS Code 的 setting.json 中加入如下配置:
"yaml.schemas": {
"https://ci.coding.net/docs/conf-schema.json": ".coding-ci.yml"
},
简化配置语法
配置文件是 Yaml
格式,可以利用更多 Yaml
特性(如锚点 &
、别名 *
和对象合并 <<
符号)来简化配置文件,详细说明可以阅读 《Yaml 高级特性》。
例如以下场景:当 master 和 dev 分支的流水线完全一致时,那么可以使用锚点与别名简写以减少重复内容。
.pipeline: &pipeline
docker:
image: node
stages:
- name: 依赖安装
script: npm install
- name: 测试用例检查
script: npm test
master:
push:
- <<: *pipeline
dev:
push:
- <<: *pipeline
分场景执行任务
支持分场景编排执行任务。例如可以实现在 MR 合并请求的阶段只执行构建测试任务,但是在 tag push 阶段时不仅执行构建测试任务,还需要同步执行发布步骤。
.build-fragment: &build-fragment
- name: build
script: npm run build
- name: test
script: npm test
.deploy-fragment: &deploy-fragment
- name: release
type: zhiyun:pkg
options:
product: PRODUCT
name: NAME
dist: ./release
overlying: true
- name: deploy
type: zhiyun:update
options:
product: PRODUCT
name: NAME
master:
merge_request:
- stages:
- *build-fragment
'**':
tag_push:
- stages:
- *build-fragment
- *deploy-fragment
多级嵌套
支持引用多层嵌套结构:
.fragment1: &fragment1
- name: build
script: npm run build
- name: echo 1
script: echo 1
.fragment2: &fragment2
- *fragment1
- name: echo 2
script: echo 2
master:
merge_request:
- stages:
- *fragment2
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。