# TecentHub

本文是腾讯云TecentHub文档的总结,具体详看TecentHub (opens new window)

TencentHub是腾讯云创建DevOps工作流而打造的平台,用户可通过它可方便快捷地对项目全周期中产生的文件进行存储,查看,调用等操作,同时TencentHub集成DevOps工作流,用户可根据自己的业务,使用镜像组件或service API灵活编排DevOps工作流,快速建立代码托管,持续构建,测试管理,部署等任务,打造更强的持续继承和持续交付力,加快软件迭代速度。

# 主要功能

# 多存储格式与管理

Tencent Hub 支持丰富的文件存储能力,提供 Docker Image 、二进制文件、 Helm Charts 、工作流等多种文件格式存储,不仅可以托管工程项目代码,同时可以对用户开发时产生的中间文件进行存储调用,解决用户在整个开发周期中文件管理的问题。Tencent Hub 还支持命令行、RESTful API 的上传下载及版本管理方式,更加灵活便捷地整合、使用仓库文件。

# 多协作者管理

Tencent Hub 中提供建立组织的功能,允许加入其他成员共同协作管理文件及工作流,方便多协作者的组织团队权限管理,可有效把控项目进度,高效管理代码、文件等,极大提高企业组织项目开发的工作效率,同时保证仓库中存储的私有安全。

# DevOps 编排

DevOps 工作流是基于 Tencent Hub 的流式任务执行引擎,提供多种语言的代码检查、编译、构建、测试组件及集合腾讯云上多种服务优势,将这些服务打包成容器镜像组件供用户调用,通过 Tencent Hub 中的 DevOps 编排,用户可灵活使用工作流组件,快速设计、搭建 DevOps 工作流,升级优化了传统 DevOps 方案,增强业务交付和迭代发布效率。

# 相关概念

  • 镜像:一种文件的存储形式,为一个或一组文件在某种格式下的拷贝。本产品中的镜像主要指的是容器镜像。
  • 任务:DevOps 中组件功能的代码程序。
  • 组件:组件是执行 DevOps 任务的容器镜像,定义了输入 / 输出标准、 任务进程运行标准。 组件使用环境变量为 DevOps 任务 传入初始化数据,在系统标准输出中以 Key = Value 格式输出数据和结果。
  • 工作流:用户在计算机应用环境下为项目开发创建的自动化工作流程。
  • Stage:工作流中划分工作的不同阶段节点。
  • Job:每个工作节点(stage)执行的最小业务功能单元。

# 使用流程

对于每个团队我们可以指定若干个组织,比如开发组测试组,然后根据分组来对不同的项目仓库进行读写权限控制。

对于每个新的项目,我们会建立一个项目仓库,我们构建的镜像会放到该仓库里,后面可使用docker pull将我们在此处构建的镜像拉到其他地方。构建镜像时可以一个一个构建,但是从其工作流程的选项看,该系统建议一个项目仓库只有一个镜像,在构建镜像时系统会自动添加一个工作流workflow_docker_builder,它只有一个Stage,就是使用"hub.tencentyun.com/tencenthub/thub_docker_builder"来构建docker镜像,注意这个工作流无法点击立即执行,需要点击镜像管理-》镜像构建-》立即构建,然后该工作流会开始执行。此外还可为构建镜像添加触发器,在镜像仓库有新的Tag生成时,自动执行相应的工作流。

一个工作流是为项目创建的DevOps定制化的工作流程,一个工作流包含几个Stage(阶段),每个Stage(阶段)包含几个job(任务),可以在Stage上选择这几个job(任务)是并行执行还是串行执行,每个job(任务)均可取到全局变量,每个job(任务)会使用一个工作流组件(component),它是工作流的执行单元,每个工作流组件本质上是一个docker容器镜像,理论上任何docker容器镜像都可以作为工作流组件使用。

我实际使用时,在项目仓库中的镜像构建Dockerfile里准备运行的基本环境,将镜像通过下面的规范制作成工作流组件,在该Dockerfile的entrypoint中指定一个脚本,然后再在这个脚本中再写若干要执行的指令,一般镜像构建只在环境改变时重新构建,而该镜像作为工作流组件嵌入到工作流时,可通过项目托管git仓库的提交触发执行,每次执行就会执行entrypoint中脚本中的命令。

# 工作流规范

# 基本规范

工作流组件还定义了一套组件规范,遵循此规范的组件可在UI控制台被选中,它的规范就是在dockerfile中需要定义一个名为TencentHubComponent的Label,该Label的内容是一个固定格式的json字符串,在编写时需要进行正确的转义,比如php的composer镜像的Label是:

LABEL TencentHubComponent='{\
  "description": "TencentHub 工作流组件, 使用 Composer 来安装PHP项目依赖, 可选地将依赖上传至二进制仓库.",\
  "input": [\
    {"name": "GIT_CLONE_URL", "desc": "必填参数, git clone url. 如果工作流已经关联了git项目, 用户可以通过全局环境变量`${_WORKFLOW_GIT_CLONE_URL}`获得clone url"},\
    {"name": "GIT_REF", "desc": "可选参数, git 的目标引用, 可以是git commit、 git tag 或者 git branch, 默认是master"},\
    {"name": "HUB_REPO", "desc": "可选参数, 二进制仓库, 如果此参数有值, vendor 结果将上传至此仓库"},\
    {"name": "HUB_USER", "desc": "可选参数, Tencenthub 仓库用户名. 如果希望直接使用当前操作者的身份, 可以直接设置`_WORKFLOW_FLAG_HUB_TOKEN:true`, 工作流将会自动注入HUB_USER 和 HUB_TOKEN"},\
    {"name": "HUB_TOKEN", "desc": "可选参数, Tencenthub 仓库用户名token"},\
    {"name": "ARTIFACT_TAG", "desc": "可选参数, 二进制仓库中, 构建产物的tag, 默认是latest"},\
    {"name": "ARTIFACT_PATH", "desc": "可选参数, 二进制仓库中, 构建产物的路径"}\
  ],\
  "output": [ \
    {"name": "ARTIFACT_URL", "desc": "上传成功的构建产物地址"}\
  ]\
}'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Tencent Hub Component包含:

字段 类型 必要/可选 说明
desc string 可选 组件描述信息
input array 可选 组件输入列表
output array 可选 组件输出列表

组件输入列表input格式如下:

字段 类型 必要/可选 说明
name string 必要 输入值名称
desc string 可选 输入值描述
default array 可选 输入值的默认展示值

组件输出列表output格式如下:

字段 类型 必要/可选 说明
name string 必要 输出值名称
desc string 可选 输出值描述

# 输入输出规范

工作流中的组件可以定义输入输出,下游组件可以使用上游组件已结束组件的输出,组件的输入有2个来源:

  • 上游组件的输出
  • 工作流的全局变量

输入值和输出值在工作流中将转换为环境变量进行流转,它们的命名应该符合环境变量的命名约定:

  • 由字母数字下划线构成
  • 字母建议全使用大写,用下划线分割

组件输出给下游的变量需要在stdout中以前缀[JOB_OUT]进行包裹,用=连接key和value,用换行分隔多个输出值:

[JOB_OUT] ARTIFACT = ./vendor
[JOB_OUT] IMAGE_ID = c442b20ea805
1
2

组件最终的执行状态有:

  • 执行成功
  • 执行失败
  • 执行超时

组件退出码大于0,为执行失败。等于0,为执行成功,在某些情况下,用户希望标记执行为失败,这种情况可通过输出JOB_RESULT = false来强制标记组件执行失败。

上面说到腾讯云工作流中有全局环境变量,在所有的job中都可使用:

环境变量名称 含义 生成场景 内容说明
_WORKFLOW_BUILD_TYPE 构建类型, 表示工作流被触发的方式 默认生成 manually: 手动触发; webhook: webhook触发; api: API触发
_WORKFLOW_GIT_CLONE_URL git 克隆地址 当工作流和已授权的 git 关联 包含 Basic Auth 信息的 git 克隆地址
_WORKFLOW_GIT_REF git 引用 同上 可以是 git tag, git branch 或者 git commit
_WORKFLOW_GIT_TYPE git 引用类型 同上 用于指示_WORKFLOW_GIT_REF的类型, 可选值: tag, branch, commit