1. 产品简介
  2. 快速开始
  3. 编写构建流程
  4. 配置构建计划
  5. 构建节点
  6. 管理构建计划
  7. 系统插件
  8. 自定义团队插件
  9. 最佳实践
  10. 常见问题
  11. 词汇表
持续集成——QCI / 功能优势

自研引擎(QCI)优势

新版持续集成引擎其带来的优势涵盖更为简单易懂的配置语法、插件扩展能力、优秀的资源调度等,以下是部分产品优势概览。

编写脚本

基于 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

构建过程

不止于在配置语法层面进行优化,在使用图形化编辑器中过程中也能感受到由全新引擎所带来的变化。

分布式运行

支持以「任务」级粒度进行构建节点资源下发和管理,支持灵活的分布式执行场景。同时,各项阶段也支持重命名。

新增执行条件

「任务」级粒度层面支持使用条件触发,只有当满足条件时才会执行此任务,例如需去的由上个阶段生成的制品或历经人工确认等预设条件,才能继续执行。

勾选失败条件后,若上一个任务或阶段运行失败,也不会影响本次任务的运行。

灵活分配构建时长

支持设置超时条件,灵活管控任务时长。

优化代码拉取逻辑

支持选定代码拉取范围,实现按需拉取构建代码。

高级配置

除了优化构建过程,针对环境变量与触发规则、版本管理、日志变更与任务记录管理也做出了更新。

  • 环境变量分组

一条流水线在不同场景下能够切换并使用不同的环境变量。

  • 更细粒度的触发细则

支持使用更多的触发细则,例如按路径、人员监听等条件,满足单体仓库及复杂场景下的使用。

  • 版本管理能力

具备更加强大的构建任务版本号管理策略。

  • 快速禁用/启用任务

支持流水线自动禁用。

  • 日志与追溯能力

优化实时日志刷新体验,支持快速跳转及分段展示及收起。

  • 任务变更记录

支持查看任务变更记录,追溯任务变更来源和差异详情。

上一篇持续集成简介
最近更新
感谢反馈有用
感谢反馈没用

在阅读中是否遇到以下问题?

您希望我们如何改进?