# 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": "上传成功的构建产物地址"}\
]\
}'
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
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 |