更新时间:2025-08-14 GMT+08:00

设置通用Webhook订阅

操作场景

CodeArts支持自定义消息通知,将用户操作所产生的事件,以HTTP协议发送给第三方平台。

可配置的服务及事件类型如下表所示。

表1 事件类型

服务

事件类型

需求管理

原始需求

  • 新建/提交
  • 编辑
  • 删除
  • 变更
  • 状态更新
  • 评论

系统特性

  • 新建
  • 编辑
  • 删除
  • 变更
  • 基线/取消基线
  • 状态更新
  • 评论

研发需求

  • 新建
  • 编辑
  • 删除
  • 变更
  • 基线/取消基线
  • 迁移
  • 评论
  • 状态更新

任务

  • 新建
  • 编辑
  • 删除任务
  • 评论
  • 状态更新

缺陷

  • 新建/提交
  • 编辑
  • 删除
  • 迁移
  • 状态更新
  • 评论

评审单

  • 提交
  • 转他人处理
  • 撤销/驳回
  • 变更对象评审完成
  • 变更对象决策完成
  • 评审/决策阶段完成
  • 删除
  • 评论

代码检查

代码检查任务

检查完成

  • 全部
  • 门禁通过
  • 门禁不通过

部署

应用

  • 应用部署成功
  • 应用部署失败
  • 应用部署终止

流水线

流水线

  • 已完成
  • 失败
  • 暂停
  • 挂起
  • 忽略

约束与限制

  • 仅“亚太-新加坡”区域支持本功能。
  • 仅IPD类项目支持本功能

前提条件

已新建CodeArts项目,在项目中的角色为“项目管理员”或“项目经理”。

新建Webhook订阅

  1. 进入CodeArts首页。

    1. 登录CodeArts控制台,单击,根据需要选择已开通CodeArts的区域。
    2. 单击“前往工作台”。

      如果当前账号采用的是历史计费模式(详情请参见历史计费模式说明),则单击“立即使用”。

  2. 单击目标项目名称,进入项目。
  3. 在导航中依次单击“设置 > 通用设置 > 通知设置”,进入通知设置页面。
  4. 选择“通用webhook”页签。
  5. 选择需要配置通知的服务,单击“新建Webhook订阅”。
  6. 根据实际需要完成参数配置,单击“确定”。

    表2 新建Webhook订阅

    参数

    说明

    订阅事件名称

    通用Webhook的名称。

    URL

    HTTP Server的接收请求的URL地址,当前只支持使用POST方式接收。

    事件类型

    触发通用Webhook通知的事件类型,支持的事件类型参考表1

    HTTP请求头

    通用Webhook通知的HTTP请求头。此参数为可选参数,请根据需要配置。

    HTTP请求头是HTTP协议中定义的一种规范。

    服务在对应的事件发生时,会调用用户配置的URL。调用URL时,有可能会需要同时携带HTTP请求头(例如用来鉴权)。

    HTTP请求头的格式一般为“key: value”,例如:Content-Type: application/json。

    一次请求可以发送多个请求头,当发送多个请求头时,通过换行分隔,每一行代表一个请求头。

    单个请求头最大长度100,最多可输入20个请求头。

    了解更多HTTP请求头相关知识,请参考HTTP官网文档

    自定义模板

    通过自定义模板设置请求Body,可使用“${}”动态定义参数(例如“${eventName}”表示事件名),可支持参数请参考事件数据结构说明

    操作成功后,页面中显示新建的Webhook订阅记录。

事件数据结构说明

  • 需求管理:
    表3 需求管理服务动态定义参数表

    动态参数

    说明

    ${project.id}

    项目ID

    ${project.url}

    项目url

    ${issue.id}

    工作项ID

    ${issue.title}

    工作名称

    ${issue.url}

    工作项url

    ${operator.username}

    操作用户名

    ${operator.id}

    操作人ID

    ${review.id}

    评审单ID

    ${review.title}

    评审单标题

    ${review.url}

    评审单url

    ${operation}

    事件名称

    ${event.id}

    事件ID

    ${event.time}

    事件时间

  • 代码检查
    {
    	"eventName": "检查完成",  //事件名
    	"eventCode": "taskExecuteCompleted",  //事件编码
    	"project": {
    		"id": "", //项目 ID
    		"url": "" // 代码检查项目地址
    	},
    	"task" : {
    		"id": "", // 任务 ID
    		"name": "", // 任务名称
    		"gitUrl": "",  // 仓库地址
    		"creator": ""  // 任务创建人
    	},
    	"job": {
    		"id": "", // 执行 ID
    		"startTime": "", // 任务执行开始时间
    		"finishTime": "", // 任务执行结束时间
    		"status": "",  // 任务状态(成功、失败、终止)
    		"gateResult": "", // 门禁结果(通过、不通过)
    		"executor": "", // 执行人
    		"url": "" // 执行记录跳转地址
    	},
    	"issues": {
    		"critical": "", // 致命问题数
    		"major": "", // 严重问题数
    		"minor": "", // 一般问题数
    		"suggestion": "" // 提示问题数
    	}
    }
  • 部署

    事件名

    事件编码

    应用部署成功

    success

    应用部署失败

    failure

    应用部署中止

    stop

    {
    	"eventName": "应用部署成功",  //事件名
    	"eventCode": "success",  //事件编码
    	"taskName": "", //应用名称
    	"projectName": "", //项目名称
    	"result": "", //执行结果
    	"sort": "", //执行序号
    	"startUser": "", //执行人
    	"startTime": "", //执行时间
    	"link":""//部署详情链接
    }
    
  • 流水线

    流水线服务参数的调用方式为“${pipeline.参数名},例如:调用流水线ID“${pipeline.pipeline_id}”。

    流水线服务提供的可调用参数如下。
    {
    	"pipeline": {
    		"pipeline_id": "", //流水线ID
    		"run_number": "", //流水线执行编号
    		"project_id": "", //流水线所属项目ID
    		"run_id": "", //流水线执行ID
    		"timestamp": "", //流水线执行时间戳
    		"trigger_type": "", //流水线触发类型
    		"name": "" //流水线名称
    	}
    }