将代码仓库(如 Git、SVN 等)与禅道(项目管理工具)打通,通常是为了实现需求、任务、缺陷与代码变更的关联,提升研发流程的自动化和可追溯性。以下是实现打通的常见方案和步骤,供参考:一、核心目标
将代码仓库(如 Git、SVN 等)与禅道(项目管理工具)打通,通常是为了实现需求、任务、缺陷与代码变更的关联,提升研发流程的自动化和可追溯性。通过以上方案,可实现代码仓库与禅道的自动化联动,提升研发流程的透明度和效率。具体实现细节需根据禅道版本(如开源版、企业版)和代码仓库类型调整。中添加脚本,解析最新提交信息,提取任务 ID 并调用禅道 API。在代码提交或合并时触发脚本,调用禅道 API 实
·
将代码仓库(如 Git、SVN 等)与禅道(项目管理工具)打通,通常是为了实现需求、任务、缺陷与代码变更的关联,提升研发流程的自动化和可追溯性。以下是实现打通的常见方案和步骤,供参考:
一、核心目标
- 双向关联:禅道中的任务 / 缺陷可关联代码提交记录,代码提交时可自动关联禅道任务。
- 状态同步:代码提交后自动更新禅道任务状态(如 “已解决”“待验证”)。
- 数据追溯:在禅道中查看任务对应的代码变更历史,或在代码仓库中查看变更关联的需求。
二、实现方式:通过禅道 API + 代码仓库钩子
1. 禅道端配置
-
开启 API 权限:
- 登录禅道管理员账号,进入 系统管理 > 权限管理 > API 权限,为相关用户分配 API 访问权限。
- 记录需要使用的用户 API Token(在用户个人设置中生成)。
-
创建自定义字段(可选):
- 若需在禅道任务中显示代码仓库链接,可在 设置 > 自定义字段 中添加 “代码提交记录” 字段(类型为文本或链接)。
2. 代码仓库端配置(以 Git 为例)
通过 Git 钩子(Hook) 在代码提交或合并时触发脚本,调用禅道 API 实现联动。
场景 1:代码提交时关联禅道任务
-
提交信息规范:
要求开发人员在提交信息中包含禅道任务 ID,格式示例:bash
# 格式:[任务类型][任务ID]-简要说明 fix #123-修复登录页bug feat #456-新增用户注册功能- 任务类型:
fix(缺陷)、feat(需求)、task(任务)等,需与禅道中的类型对应。 - 任务 ID:禅道中任务的数字 ID(如 #123 对应禅道任务 URL:
http://zentao.example.com/task-view-123.html)。
- 任务类型:
-
编写 Hook 脚本(post-commit 钩子):
在代码仓库的.git/hooks/post-commit中添加脚本,解析最新提交信息,提取任务 ID 并调用禅道 API。示例脚本(Python):
python
import re import requests import sys # 解析提交信息 commit_msg = sys.stdin.read() pattern = r'([a-z]+)#(\d+)' # 匹配fix#123、feat#456等格式 matches = re.findall(pattern, commit_msg.lower()) if matches: zentao_url = "http://your-zentao-domain.com" api_token = "your-api-token" # 禅道用户的API Token headers = {"Content-Type": "application/json"} for task_type, task_id in matches: # 禅道任务API路径(根据任务类型调整,如缺陷为bug,需求为story) if task_type == "fix": api_path = f"/api/v1/bugs/{task_id}" elif task_type == "feat": api_path = f"/api/v1/stories/{task_id}" elif task_type == "task": api_path = f"/api/v1/tasks/{task_id}" else: continue # 调用禅道API更新任务状态(示例:标记为“已解决”) url = f"{zentao_url}{api_path}" payload = { "status": "resolved", # 禅道任务状态(需符合枚举值) "comment": f"关联代码提交:{commit_msg[:50]}..." # 可选备注 } response = requests.put(url, json=payload, auth=(api_token, ""), headers=headers) if response.status_code == 200: print(f"成功关联任务{task_id}") else: print(f"关联任务{task_id}失败:{response.text}") -
部署 Hook 脚本:
将脚本保存为可执行文件,放置在代码仓库的.git/hooks/目录下,并确保代码仓库服务器有权限访问禅道 API。
场景 2:禅道任务触发代码仓库操作(可选)
- 通过禅道的 工作流钩子 或 自定义事件,在任务状态变更时触发代码仓库操作(如触发 CI/CD 流程)。
- 需在禅道中开发插件或使用 Webhook,调用代码仓库 API(如 GitLab CI API、GitHub Actions 等)。
三、进阶方案:使用中间件或插件
-
禅道官方插件:
- 检查禅道应用市场是否有 代码仓库集成插件(如 Git、SVN 插件),部分版本可能支持直接配置仓库地址和钩子。
-
Jenkins/CI 工具集成:
- 在 CI 流水线中,通过禅道 API 获取任务信息,或在代码构建成功后调用禅道 API 更新任务状态。
-
自研中间件:
- 开发独立服务监听代码仓库事件(如 GitWebhook),解析事件后批量同步至禅道。
四、注意事项
-
权限与安全:
- 限制禅道 API 的访问 IP,避免公开暴露。
- 使用 API Token 而非明文密码,并定期轮换。
-
格式规范:
- 强制要求开发人员按规范填写提交信息,避免解析错误。
- 可通过代码检查工具(如 pre-commit 钩子)校验提交信息格式。
-
状态映射:
- 确保禅道任务状态(如 “已解决”“待验证”)与代码流程(如提交、合并、测试)一致。
-
日志与监控:
- 记录 Hook 脚本的执行日志,便于排查同步失败问题。
- 设置报警机制(如脚本执行失败时发送通知)。
五、验证效果
- 在禅道中创建任务(如缺陷 #123),提交包含
fix #123的代码。 - 检查禅道任务状态是否自动变更为 “已解决”,并生成关联记录。
- 在禅道任务详情中查看代码提交链接(需自定义字段或插件支持)。
通过以上方案,可实现代码仓库与禅道的自动化联动,提升研发流程的透明度和效率。具体实现细节需根据禅道版本(如开源版、企业版)和代码仓库类型调整。
更多推荐




所有评论(0)