搭建自动化部署流水线
本文面向运维与实施人员,介绍如何在使用 GitHub 和 GitHub Actions 将 TapData 项目发布到多套环境前,完成仓库、环境、凭据和自托管运行器准备。
准备工作
在开始配置之前,请确保已具备以下资源和信息:
| 所需资源 | 具体要求 |
|---|---|
| GitHub 组织 | 至少拥有 1 个 GitHub 组织管理员权限。Worker 仓库与租户仓库可放在同一组织下。 |
| TapData 环境 | 建议准备开发、测试和生产三套 TapData 环境;如暂不需要开发环境,可至少准备测试和生产两套环境。 |
| 内网部署服务器 | 至少 1 台 Linux 服务器(推荐 Ubuntu 20.04+)作为自托管运行器,并同时可访问 GitHub 和所有环境的 TapData 服务端口。服务器需安装 git、bash、jq、curl,并注册 tapdata 标签。更多介绍,见添加自托管的运行器。 |
| 数据库账号信息 | 已从 DBA 处获取各环境数据库的连接地址、账号和密码。 |
| 部署审批人账号 | 至少指定 1 个 GitHub 账号作为资源导入审批人。 |
架构与规划要点
仓库规划
自动化部署依赖两类 GitHub 仓库协同工作:
| 仓库类型 | 用途 | 可见性 |
|---|---|---|
| Worker 仓库(1 个) | 存放共享的部署脚本和 Workflow,方便跨仓库调用,由运维团队维护 | Internal |
| 租户仓库 | 存放从 TapData 导出的配置文件,每个团队或业务域独立一个租户仓库 | Internal 或 Private |
环境规划
推荐按开发、测试和生产三类业务环境规划。对客沟通时可直接使用业务环境名称;GitHub Environment 和 Workflow 中使用的是流水线可识别的环境代码。
| 业务阶段 | 默认环境代码 | 默认触发方式 | 说明 |
|---|---|---|---|
| 开发环境 | dev | main 分支合并后自动触发 | 可选;如不需要开发自动部署,可调整租户仓库 Workflow。 |
| 测试/验收环境 | sit | 推送 Git Tag 后自动触发 | 可选 |
| 生产环境 | prod | 手动触发 | 推荐在测试或验收通过后,由运维手动发布。 |
| 资源导入审批门 | deploy | 由部署流程自动进入 | 必选;不是业务环境,不存放 TapData 地址或连接凭据。 |
本文后续以“测试/验收环境”描述业务阶段。sit 仅表示官方模板中的默认环境代码;如需改为 test 或 uat 等自定义代码,需要同步修改租户仓库 Workflow、Worker 脚本校验逻辑、Secrets / Variables 前缀和回滚选项。
扩展阅读:按客户环境调整部署流程
由于环境数量和命名风格可能不同,调整时需要同时修改 GitHub Environment、URL / Access Code、租户仓库 Workflow 和发布步骤,不建议只改其中一处。
| 客户环境流程 | 推荐配置方式 | 调整说明 |
|---|---|---|
| 开发 → 测试 → 生产 | 保持开发、测试、生产三类业务环境和 deploy 审批门 | main 合并到开发环境,Tag 发布到测试环境,生产手动发布。 |
| 开发 → UAT → 生产 | 使用测试/验收环境承载客户口径的 UAT | 无需增加额外环境;按默认环境代码配置 DEV_*、测试环境前缀和 PROD_* 变量即可。 |
| 测试 → 生产 | 仅保留测试、生产业务环境和 deploy 审批门 | 如不需要开发自动部署,可删除租户仓库 Workflow 中 push.branches / push.paths 的自动触发配置,仅保留 Tag 和手动发布。 |
如下展示租户仓库 Workflow 中 workflow_dispatch.target_env.options 的配置位置;如需生产发布,请在 该选项中加入 prod。
# 省略其他配置项
workflow_dispatch:
inputs:
target_env:
description: 'Target environment'
required: true
type: choice
options:
- dev
- sit
- prod
# 省略其他配置项
回滚流程也需要同步检查,在 tapdata-rollback.yml 的 workflow_dispatch.target_env.options 中仅保留实际可回滚的环境。
权限与安全设计
TapData 的 Git 导出配置文件会自动脱敏,代码仓库中只存放业务配置逻辑。各环境的真实连接凭据独立存储在对应的 GitHub Environment Secrets / Variables 中,部署时按环境自动注入;文件导出保留完整配置,应妥善保管。
- 在租户仓库的
main分支开启分支保护:禁止直接推送、要求 Pull Request、要求 Code Review 和 Workflow 检查通过后再合并。 deploy审批人应为独立的运维人员,不建议由开发人员审批自己提交的变更。审批人在 GitHub Actions 界面审批时,可通过 Step Summary 直观核对结构化的差异预览(包括连接变动、任务 DAG 算子与连线变动、API 变更、服务索引独立预览及孤儿索引告警),实现高危操作的严格把控。- 组织级 Secrets / Variables 用于存放共享配置,例如
GH_DEPLOY_TOKEN、各环境的 TapData 地址和 Access Code。 - Environment 级 Secrets / Variables 用于存放各连接在不同环境下的真实连接信息。
GitHub 权限与凭据配置
自动化部署涉及 GitHub 仓库访问、TapData 环境访问和数据库连接凭据,建议按下表 拆分配置,避免把所有信息都放在同一层级。
| 配置项 | 配置位置 | 用途 | 建议配置 |
|---|---|---|---|
GH_DEPLOY_TOKEN | GitHub 组织级或租户仓库级 Secret | Runner 拉取 Worker 仓库脚本、读取租户仓库配置,以及 TapData Git 导出时向租户仓库推送分支并创建 PR | Fine-grained PAT 需至少包含 Worker 仓库读取权限,以及租户仓库 Contents 和 Pull requests 读写权限;如需要写入 .github/workflows/,还需补充 Workflows 写入权限。Classic PAT 可使用 repo 和 workflow 权限。 |
{ENV}_TAPDATA_ACCESS_CODE | GitHub 组织级或租户仓库级 Secret | 获取指定 TapData 环境的访问 Token | 每个业务环境配置一份,例如测试环境和生产环境各配置一份。 |
{ENV}_TAPDATA_URL | GitHub 组织级或租户仓库级 Variable | 指定目标 TapData 环境地址 | 每个业务环境配置一份,例如测试环境和生产环境各配置一份。 |
| 数据库连接凭据 | 租户仓库对应业务 Environment 的 Secrets / Variables | 部署时注入连接的真实地址、账号和密码 | 配置在开发、测试、生产等业务 Environment 下,不配置在 deploy 下。 |
| Runner Group 访问 | GitHub 组织 Settings → Actions → Runner groups | 允许租户仓库使用自托管运行器 | 将 Runner Group 授权给实际执行部署的租户仓库;仅在明确接受风险时允许公共仓库使用。 |
如在组织级配置 Secrets / Variables,请确认对应配置已授权给租户仓库使用;如只服务单个租户仓库,也可以直接配置在该租户仓库下。
连接凭据命名规则
连接相关的 Secrets / Variables 命名规则为:将 TapData 中的连接名称转换为全大写后直接匹配。由于 GitHub Secret / Variable 名称仅支持字母、数字和下划线,且需以字母或下划线开头,建议 TapData 连接名称也采用相同规则,例如连接名 oracle_source 对应前缀 ORACLE_SOURCE。不建议在连接名称中使用空格、连字符(-)或中文,否则部署时可能无法匹配到对应凭据。
多套环境之间的配置隔离完全由 GitHub Environments 实现,连接凭据在各业务 Environment(如 dev、sit、prod)下配置同名项即可。切勿在连接凭据名称前人为添加环境前缀(例如不要配置成 DEV_ORACLE_SOURCE_DSN 或 SIT_FDM_URI,否则流水线将无法正确识别)。
初始化步骤
以下步骤用于将前面的规划落实为可执行的 GitHub 自动化部署链路。
步骤一:初始化 GitHub 仓库结构
为实现部署逻辑与业务配置分离,我们采用双仓库架构,其中 Worker 仓库 由运维团队统一维护存放核心部署脚本,租户仓库由各业务团队各自维护存放项目配置,通过调用 Worker 仓库逻辑完成部署,无需关心底层实现。
-
基于 TapData 提供的官方 Worker 仓库(tapdata/tapdata-cicd-worker),在您的 GitHub 组织下创建独立副本,可通过 Use this template 或克隆后推送到新仓库的方式完成,并将仓库命名为
tapdata-cicd-worker、可见性设为 Internal。仓库包含部署和回滚的编排逻辑及与 TapData API 交互的底层脚本:
tapdata-cicd-worker/
├── .github/workflows/
│ ├── tapdata-deploy.yml # 核心部署逻辑
│ └── tapdata-rollback.yml # 核心回滚逻辑
├── conf/
│ └── Task_Run_Order.json # 任务执行顺序配置
├── scripts/ # 底层交互脚本
└── tenant-template/.github/workflows/
├── tapdata-deploy.yml # 租户仓库调用模板
└── tapdata-rollback.yml # 租户仓库回滚调用模板 -
为业务团队创建一个存放配置的租户仓库,仓库名称建议与 TapData 平台中的项目名称保持一致(例如
user-center-sync),并确认默认分支为main。如仓库默认分支仍为master,请先在 GitHub 仓库设置中切换为main,或同步调整 Workflow 中监听的分支名。 -
租户仓库只需创建两个轻量级的 Workflow 路由文件(从 Worker 仓库的
tenant-template/.github/workflows/目录复制),用于把触发事件转发给 Worker 仓库处理:tapdata-deploy.yml:负责监听配置文件的合并(如main分支的*_tapdata_export/**路径变更)、Tag 推送以及手动触发动作,默认将租户仓库名作为项目名。合并 PR 触发部署时,流水线在 Actions 列表中会自动以该 PR 的标题作为运行名称(例如feat(api): xxx (#12) · dw-pipeline → dev),便于直观追踪每次部署对应的具体业务变更。tapdata-rollback.yml:负责接收手动触发的回滚指令(指定环境和回滚版本)。
提示在复制过来的这两个路由文件中,须将
{WORKER_REPO}占位符替换为您刚刚创建的 Worker 仓库 路径,例如your-org/tapdata-cicd-worker。如 TapData 项目名与租户仓库名不一致,还需调整project入参。 -
将修改好的 Workflow 文件提交并推送到租户仓库的
main分支。
步骤二:配置 GitHub Secrets 和 Variables
为了让 GitHub Actions 能够顺利连接并操作不同环境的 TapData 服务,需要配置仓库访问凭据、TapData 访问凭据和服务地址。以下以组织级配置为例;如只服务单个租户仓库,也可进入租户仓库配置同名 Secrets / Variables。
-
登录具备仓库权限的 GitHub 账号,进入个人 Settings → Developer settings → Personal access tokens。
-
点击生成新 Token,名称可填
tapdata-deploy,有效期建议设置为 90 天以内,并按前文权限表授予最小可用权限,生成后请立即复制并妥善保存该 Token。提示如果您的 Worker 仓库和租户仓库在同一个 GitHub 组织下,建议使用更安全的 Fine-grained PAT。如无法为不同仓库设置不同权限,请通过 Only select repositories 将 Token 范围限制在 Worker 仓库和实际租户仓库内。
-
进入 组织设置 → Secrets and variables → Actions,或进入租户仓库的 Settings → Secrets and variables → Actions。
-
在 Secrets 标签卡下添加以下内容(加密存储):

Secret 名称 内容说明 GH_DEPLOY_TOKEN刚刚在第一步中申请并保存的 PAT。 测试环境对应的 {ENV}_TAPDATA_ACCESS_CODE测试环境 TapData 实例的访问码;沿用官方模板时为 SIT_TAPDATA_ACCESS_CODE。PROD_TAPDATA_ACCESS_CODE生产环境 TapData 实例的访问码。 {ENV}_TAPDATA_ACCESS_CODE可选,如启用开发环境,按环境代码补充对应访问码,例如 DEV_TAPDATA_ACCESS_CODE。VAULT_ENCRYPTION_KEY可选,用于加密流水线生成的 vault.json凭据文件。 -
在 Variables 标签卡下添加以下内容(明文存储):
Variable 名称 示例值 测试环境对应的 {ENV}_TAPDATA_URL测试环境地址,如 http://10.0.0.2:3030;沿用官方模板时为SIT_TAPDATA_URL。PROD_TAPDATA_URL生产环境地址 {ENV}_TAPDATA_URL可选,如启用开发环境,按环境代码补充对应地址,例如 DEV_TAPDATA_URL。提示如需获取 TapData Access Code,可使用管理员身份登录对应环境的 TapData 平台,进入系统设置 → 用户管理查看对应用户信息;部分场景下,也可由该用户登录后在右上角的个人设置中复制访问码。
步骤三:创建 Environment 并配置连接信息
-
进入租户仓库的 Settings → Environments。
-
创建实际启用的业务 Environment(通常对应开发、测试和生产环境)以及固定审批门
deploy