将代码仓库(如 Git、SVN 等)与禅道(项目管理工具)打通,通常是为了实现需求、任务、缺陷与代码变更的关联,提升研发流程的自动化和可追溯性。以下是实现打通的常见方案和步骤,供参考:一、核心目标

将代码仓库(如 Git、SVN 等)与禅道(项目管理工具)打通,通常是为了实现需求、任务、缺陷与代码变更的关联,提升研发流程的自动化和可追溯性。以下是实现打通的常见方案和步骤,供参考:

一、核心目标

  1. 双向关联:禅道中的任务 / 缺陷可关联代码提交记录,代码提交时可自动关联禅道任务。
  2. 状态同步:代码提交后自动更新禅道任务状态(如 “已解决”“待验证”)。
  3. 数据追溯:在禅道中查看任务对应的代码变更历史,或在代码仓库中查看变更关联的需求。

二、实现方式:通过禅道 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 等)。

三、进阶方案:使用中间件或插件

  1. 禅道官方插件

    • 检查禅道应用市场是否有 代码仓库集成插件(如 Git、SVN 插件),部分版本可能支持直接配置仓库地址和钩子。
  2. Jenkins/CI 工具集成

    • 在 CI 流水线中,通过禅道 API 获取任务信息,或在代码构建成功后调用禅道 API 更新任务状态。
  3. 自研中间件

    • 开发独立服务监听代码仓库事件(如 GitWebhook),解析事件后批量同步至禅道。

四、注意事项

  1. 权限与安全

    • 限制禅道 API 的访问 IP,避免公开暴露。
    • 使用 API Token 而非明文密码,并定期轮换。
  2. 格式规范

    • 强制要求开发人员按规范填写提交信息,避免解析错误。
    • 可通过代码检查工具(如 pre-commit 钩子)校验提交信息格式。
  3. 状态映射

    • 确保禅道任务状态(如 “已解决”“待验证”)与代码流程(如提交、合并、测试)一致。
  4. 日志与监控

    • 记录 Hook 脚本的执行日志,便于排查同步失败问题。
    • 设置报警机制(如脚本执行失败时发送通知)。

五、验证效果

  1. 在禅道中创建任务(如缺陷 #123),提交包含fix #123的代码。
  2. 检查禅道任务状态是否自动变更为 “已解决”,并生成关联记录。
  3. 在禅道任务详情中查看代码提交链接(需自定义字段或插件支持)。

通过以上方案,可实现代码仓库与禅道的自动化联动,提升研发流程的透明度和效率。具体实现细节需根据禅道版本(如开源版、企业版)和代码仓库类型调整。

你可能感兴趣的:(git,svn,自动化)