更新时间:2026-01-28 GMT+08:00

设置通用Webhook订阅

操作场景

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

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

表1 事件类型

分类

事件类型

原始需求

新建/提交

编辑

删除

变更

状态更新

催单

评论

系统特性

新建

编辑

删除

变更

基线/取消基线

状态更新

催单

评论

研发需求

新建

编辑

删除

变更

基线/取消基线

迁移

评论

催单

状态更新

任务

新建

编辑

删除任务

评论

催单

状态更新

缺陷

新建/提交

编辑

删除

迁移

状态更新

催单

评论

评审单

提交

转他人处理

撤销/驳回

变更对象评审完成

变更对象决策完成

评审/决策阶段完成

删除

评论

表2 事件类型

分类

事件类型

仓库

容量预警

删除仓库

合并请求

开启合并请求

更新合并请求

合并合并请求

检视合并请求

审核合并请求

新建评审意见

解决评审意见

表3 事件类型

分类

事件类型

流水线

已完成

失败

暂停

挂起

忽略

表4 事件类型

分类

事件类型

代码检查任务

检查完成

  • 全部
  • 门禁通过
  • 门禁不通过
表5 事件类型

分类

事件类型

编译构建任务

任务构建成功

任务构建失败

任务被禁用

任务被删除

任务配置被更新

表6 事件类型

分类

事件类型

应用

应用部署成功

应用部署失败

应用部署中止

约束与限制

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

前提条件

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

新建Webhook订阅

  1. 进入CodeArts首页。

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

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

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

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

    图1 新建webhook(以流水线服务为例)
    表7 新建Webhook订阅

    参数

    说明

    订阅事件名称

    通用Webhook的名称。

    URL

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

    事件类型

    触发通用Webhook通知的事件类型,支持的事件类型参考操作场景

    HTTP请求头

    通用Webhook通知的HTTP请求头。此参数为可选参数。

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

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

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

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

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

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

    自定义模板

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

事件数据结构说明

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

    动态参数

    说明

    ${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}

    事件时间

  • 代码托管
    • 仓库

      订阅事件

      事件名

      事件编码

      删除仓库

      删除仓库

      CodeArtsRepo-Repository-Delete

      容量预警

      容量预警

      CodeArtsRepo-Repository-CapacityWarning

      {
      	"eventCode": "",  // 事件编码
      	"eventName": "", // 事件名
      	"project": {
      		"id": "", //项目 ID
      		"url": "" // 项目 URL
      	},
      	"repo": {
      		"id": 0, // 仓库ID
      		"webUrl": "",  // 仓库访问地址
      		"httpUrl": "",  // 仓库http地址
      		"sshUrl": "",  // 仓库ssh地址
      		"name": "", // 仓库名称
      		"groupName": "" // 组织名
      	}
      	"operator": {
      		"id": 0, // 操作人用户ID
      		"nickName": "", // 操作人用户昵称
      		"name": "", // 操作人用户名
      		"username": "", // 操作人用户IAM ID
      		"tenantName":"" // 操作人租户名
      	}
      }
    • 合并请求

      订阅事件

      事件名

      事件编码

      开启合并请求

      开启合并请求

      CodeArtsRepo-MergeRequest-Create

      更新合并请求

      更新合并请求

      CodeArtsRepo-MergeRequest-Update

      合并合并请求

      合并合并请求

      CodeArtsRepo-MergeRequest-Merge

      检视合并请求

      合并请求检视通过

      CodeArtsRepo-MergeRequest-ReviewPass

      合并请求检视撤销

      CodeArtsRepo-MergeRequest-ReviewRevoke

      审核合并请求

      合并请求审核拒绝

      CodeArtsRepo-MergeRequest-ApprovalReject

      合并请求审核通过

      CodeArtsRepo-MergeRequest-ApprovalPass

      合并请求审核撤销

      CodeArtsRepo-MergeRequest-ApprovalRevoke

      新建评审意见

      新建评审意见

      CodeArtsRepo-MergeRequest-CreateComment

      解决评审意见

      解决评审意见

      CodeArtsRepo-MergeRequest-Resolve

      {
      	"eventCode": "",  // 事件 ID
      	"eventName": "", // 事件名
      	"project": {
      		"id": "", //项目 ID
      		"url": ""  // 项目 URL
      	},
      	"repo": {
      		"id": 0, // 仓库 ID
      		"webUrl": "",  // 仓库访问地址
      		"httpUrl": "",  // 仓库http地址
      		"sshUrl": "",  // 仓库ssh地址
      		"name": "", // 仓库名称
      		"groupName": "" // 组织名
      	}
      	"operator": {
      		"id": 0, // 操作人用户ID
      		"nickName": "", // 操作人用户昵称
      		"name": "", // 操作人用户名
      		"username": "", // 操作人用户IAM ID
      		"tenantName":"" // 操作人租户名
      	},
      	"mergeRequest": {
      		"id": 0, // 合并请求ID
      		"iid": 0, // 合并请求序列ID
      		"url":"", // 合并请求访问地址
      		"createdAt": "", // 合并请求创建时间
      		"updatedAt": "",// 合并请求更新时间
      		"title": "", // 合并请求标题
      		"description": "", // 合并请求描述
      		"sourceBranch": "", // 合并请求源分支
      		"targetBranch": "", // 合并请求目标分支
      		"state": "",// 合并请求状态:opened、closed、merged、locked
      		"author": {
      			"id": 0, // 合并请求创建人用户ID
      			"nickName": "", // 合并请求创建人用户昵称
      			"name": "", // 合并请求创建人用户名
      			"username": "" // 合并请求创建人用户IAM ID
      			"tenantName":"" // 合并请求创建人租户名
      		}
      	},
      	"mergeRequestReview": {
      		"id": 0, // 评审意见 ID
      		"body": "", // 评审意见内容
      		"url": "",  // 评审意见访问地址
      		"author": {
      			"id": 0, // 评审意见创建人用户ID
      			"nickName": "", // 评审意见创建人用户昵称
      			"name": "", // 评审意见创建人用户名
      			"username": "" // 评审意见创建人用户IAM ID
      			"tenantName":"" // 评审意见创建人租户名
      		},
      		"createdAt": "", // 评审意见创建时间
      		"updatedAt": "",// 评审意见更新时间
      	}
      }
  • 代码检查
    {
    	"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": "" // 提示问题数
    	}
    }
  • 编译构建
    表9 编译构建服务动态定义参数表

    动态参数

    说明

    ${BUILD.TITLE}

    标题,如“编译构建通知”

    ${BUILD.URL}

    构建任务链接。

    ${BUILD.EVENT}

    任务事件,如“编辑了构建任务”

    ${BUILD.EXECUTOR_NAME}

    事件执行人,如“路人甲”

    ${BUILD.EXECUTOR_ID}

    事件执行人ID,如“路人甲的ID”

    ${BUILD.EXECUTE_TIME}

    事件执行时间,如“2025-02-06 11:11:11”

    ${BUILD.TASK_NAME}

    构建任务名,如“测试构建任务1”

    ${BUILD.PROJECT_NAME}

    构建任务所在项目名,如“测试项目1”

    ${BUILD.PROJECT_ID}

    构建任务所在项目的ID,如“测试项目1的ID”

  • 部署

    事件名

    事件编码

    应用部署成功

    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": "" //流水线名称
    	}
    }