产品优势
产品优势
基于以上现状,CODING 从流程串联及数据整合这两个角度出发,打造一个更纯粹的持续集成/持续交付平台,它具备以下特性及优势:
- 流水线作业
CI 任务支持流水线作业,业务可自行将任务划分成若干阶段(流水线形式),使用各式满足各研发环节的界定和串联。
- 开放能力
相比其它平台封闭内置能力,我们提供更开放的自助接入能力。用户可根据自身需要将自动化工具接入到 CI/CD 任务中,满足各类自动化工具组合诉求。
- 数据可视化
你可以在 CODING 快速浏览整个持续集成/部署的核心关键信息,并提供详细信息的跳转链接,辐射关联其他更有价值的内容。
- 容器友好型
基于 Docker 容器的集成任务。相比以往需要自行提供编译机接入的持续集成系统,我们支持以容器的方式完成项目的整个持续集成任务,降低接入成本。支持编译 Docker 镜像,能够基于 Dockerfile 完成镜像编译并自动提交至任意 Dockerhub。
- 集成任务加速
针对业务特性,自动缓存集成任务的中间结果,在任务内及任务间复用,从而达到任务加速的功能。此外还能够通过磁性分发、工作空间缓存等管理方式对集成任务静默提速。
新版持续集成引擎其带来的优势涵盖更为简单易懂的配置语法、插件扩展能力、优秀的资源调度等,以下是部分产品优势概览。
新版持续集成引擎其带来的优势涵盖更为简单易懂的配置语法、插件扩展能力、优秀的资源调度等,以下是部分产品优势概览。
编写脚本
基于 Pipeline as Code 理念,所有配置均使用代码化配置与存储机制。语法预览:
version: 2.0 # CIFile版本号,请不要修改
worker:
label: my_label # 任务执行的集群,当为 PUBLIC 或不设置 label 属性时,将使用公共节点执行
docker: # 可单独指定执行环境的 Docker 镜像,如不设置 docker 配置,将使用内置执行环境,详见编译环境章节
registry: my_custom_registry
image: my_custom_image
username: $DOCKER_USER
password: $DOCKER_PWD
# 用户自定义环境变量
env:
USERNAME: myname
PASSWD:
secret: xxxxyyyzz # 加密字符串,在执行时 CODING-CI 会将字符串解密
TESTREADONLY: # 复杂环境变量结构,详见环境变量章节
value: my_value
desc: test readonly atrribute
readonly: true
MYREPO: ${QCI_WORKSPACE}/git # 支持环境变量的引用嵌套
# 定义任务在启动前需要执行哪些初始化动作
setup:
- yum install php
- pip3 install requests
# 定义任务的提交触发方式
trigger:
branches:
include: # 定义哪些分支的变更会触发任务,不填或 '*' 代表所有分支都会触发此任务
- master
- release/*
exclude: # 定义哪些分支的变更不会触发任务,不填代表没有分支会被忽略
- release/old*
- release/bak*
tags:
include: # 定义哪些 tag 的推送会触发任务,不填或 '*' 代表所有分支都会触发此任务
- master
- release/*
exclude: # 定义哪些 tag 的推送会触发任务,不填代表没有 tag 会被忽略
- release/old*
- release/bak*
paths:
include: # 支持定义分支下的哪些目录变更后才触发任务,不填或 '*' 代表所有文件变更都会触发此任务
- src/*
exclude: # 支持定义分支下的哪些目录变更后不触发任务,不填代表没有文件变更会被忽略
- release
- build
# 定义任务的 MR 触发方式
mr:
branches:
include: # 定义哪些分支的变更会触发任务,不填或 '*' 代表所有分支都会触发此任务
- master
- release/*
exclude: # 定义哪些分支的变更不会触发任务,不填代表没有分支会被忽略
- release/old*
- release/bak*
paths:
include: # 支持定义分支下的哪些目录变更后才触发任务,不填或 '*' 代表所有文件变更都会触发此任务
- src/*
exclude: # 支持定义分支下的哪些目录变更后不触发任务,不填代表没有文件变更会被忽略
- release/*
- .gitignore
is_local_mr: 0 # 是否在任务执行前尝试在编译机上模拟一次合入
is_block_mr: 0 # 在流水线执行中或执行失败时,是否拦截 MR 的合入
# 定义流水线执行内容
stages:
- stage: install # 一个 stage 下如果只有一个 task,支持简写
cmds:
- pip install -r requirements.txt
- stage: build
if: $QCI_REPO_BRANCH = master # 支持条件执行
cmds:
- make clean
- make build
artifacts: # 收集在任务执行完成时的制品
- dist/*.apk
- stage: test
worker:
label: PUBLIC
language: python
tasks: # 一个 stage 下的多个 task 会在直接节点上并发执行
- task: unittest
if: $QCI_REPO_BRANCH = master
cmds:
- make test -unittest
temps: # 任务内缓存,将传递到后续 stages,任务完成后销毁
- ./result/*
- task: ui-automation
output_timeout: 20
cmds:
- make test -qta
- task: lint code
output_timeout: 20
ignore: true # 该任务可以忽略错误,即任务失败后也可继续往后执行
cmds:
- codedog -o ./build/codedog.json
status: ./build/codedog.json # 支持主动声明任务执行结果及报告链接
- prompt: # 人工确认阶段,在确认阶段,系统将不会继续执行直到确认完成
- msg: Should go on?
detail: "[click to detail](http://coding.net)"
env:
TAPD:
value: ""
desc: "tapd链接"
to: someone_A
timeout: 1440
- msg: another message
to: [someone_A, someone_B]
- stage: deploy
cmds:
- plugin: zhiyun_simple_submit
params:
product: ${ZHIYUN_PRODUCT}
name: ${ZHIYUN_NAME}
description: ${ZHIYUN_DESC}
tarball: ${ZHIYUN_TARBALL}
finally: # 任务结束前的清理动作,支持 success(仅成功时执行),failure(仅失败时执行) 和 all(全部执行)
failure:
cmds:
- echo "CI fails!"
- email --title "Your CI Fails!" --to hensonwang@tencent.com
cache: # 任务间缓存,设置任务间缓存
- ${HOME}/.gradle/
- ./node_modules/
# 定义通知
notifications:
- name: "通知" # QCI前端页面展示用
channel: "EMAIL;ENWECHAT" # 通知渠道。EMAIL;ENWECHAT;SMS;ENWECHAT_GROUP;WECHAT
group: "QCI_JOB_ADMIN;QCI_JOB_NOTIFY_USER" # 通知组(QCI内置的管理员成员等,如:QCI_JOB_MEMBER;QCI_JOB_ADMIN;QCI_JOB_NOTIFY_USER;QCI_TRIGGER)
enwechat_group: "" # 企业微信群id
user: "andrewjiang;" # 指定人
template: "" # 通知内容模版
on_success: change # 成功发送(change或者always或者never)
on_failure: always # 失败发送(change或者always或者never)
- name: "通知2"
channel: EMAIL
group: QCI_JOB_ADMIN
user: ""
template: ""
on_success: change
on_failure: never
# 当前任务数允许的最大执行并发数
maximum_builds: 3
# 是否清理工作空间,默认清理。1:不清理,0:清理
is_no_revert: 1
# 是否自动取消排队中的任务,默认不取消。1:取消,0:不取消
is_auto_cancel: 1
构建过程
不止于在配置语法层面进行优化,在使用图形化编辑器中过程中也能感受到由全新引擎所带来的变化。
分布式运行
支持以「任务」级粒度进行构建节点资源下发和管理,支持灵活的分布式执行场景。同时,各项阶段也支持重命名。
新增执行条件
「任务」级粒度层面支持使用条件触发,只有当满足条件时才会执行此任务,例如需去的由上个阶段生成的制品或历经人工确认等预设条件,才能继续执行。
勾选失败条件后,若上一个任务或阶段运行失败,也不会影响本次任务的运行。
灵活分配构建时长
支持设置超时条件,灵活管控任务时长。
优化代码拉取逻辑
支持选定代码拉取范围,实现按需拉取构建代码。
高级配置
除了优化构建过程,针对环境变量与触发规则、版本管理、日志变更与任务记录管理也做出了更新。
- 环境变量分组
一条流水线在不同场景下能够切换并使用不同的环境变量。
- 更细粒度的触发细则
支持使用更多的触发细则,例如按路径、人员监听等条件,满足单体仓库及复杂场景下的使用。
- 版本管理能力
具备更加强大的构建任务版本号管理策略。
- 快速禁用/启用任务
支持流水线自动禁用。
- 日志与追溯能力
优化实时日志刷新体验,支持快速跳转及分段展示及收起。
- 任务变更记录
支持查看任务变更记录,追溯任务变更来源和差异详情。
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。