跳到主要内容

PullRequest 检查门禁

Pull Request 门禁检查提供了在 Pull Request 中集成第三方流水线能力。通过构建一个 Gitee 第三方应用程序,在 Pull Request 代码产生变更时,集成执行持续集成、代码分析、代码检查扫描、自动部署等服务。将相应的执行结果返回给到 Pull Reequest 中,在页面上得以呈现,支持界面交互直接调用外部服务提供的能力。

这里使用一个简单时序图来解释下如何接入外部服务能力

如上图所示,Gitee 推送事件并接受用户操作请求以完成对接。即 Gitee 需要提供 WebHook 事件通知和接受用户操作检测请求的 API 接口。

接口说明

提示

调用检查接口,需要拥有仓库管理员的权限

创建一个检查任务

POST : /repos/{owner}/{repo}/check-runs

参数名数据类型参数所在位置参数描述
ownerstringpath仓库所在的空间地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 oschina
repostringpath仓库地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 git-osc
namestringformData必填参数,检查任务名称,如:ci-pipeline-runn
head_shastringformData必填参数,表示当次代码推送时,分支上最新提交的 Commit SHA
pull_request_idintformData选填参数,用于标识 head_sha 的检查任务是基于分支触发还是基于 Pull Request 触发。支持传入 空值 或 Pull Request WebHook 中 pull_request 对象的 id 值,默认值为空。
- 传递值为空时:检查任务将创建在具体 Commit 上。表现为某个具体提交的构建结果。
- 传入值为 Pull Request WebHook 的 pull_request 对象的 id 值:检查任务将创建在指定 Pull Request 的提交上。表现为某个 Pull Request 的构建结果。
details_urlstringformData选填,提供门禁检查项能力服务的主页地址
statusstringformData选填,当前检查任务所处的状态。具体值可以是以下值的其中一个:
- queued: 表示当前检查任务处于排队中 (默认值)
- in_progress: 表示当前检查任务处于进行中状态
- completed: 表示当前检查任务已执行完毕
started_atstringformData选填,检查任务的开始时间,要求时间格式符合 ISO 8601 规范
completed_atstringformData选填,检查任务的完成时间,要求时间格式为 ISO 8601 规范
conclusionstringformData选填,检查任务的最终状态(结论),具体值可以是以下值的其中一个:
  • action_required: 待解决
  • cancelled: 已取消
  • failure: 任务失败
  • neutral: 暂无状态
  • success: 任务成功
  • skipped: 跳过
  • stale: 陈旧的
  • timed_out: 任务超时

当检查任务结束时(completed_at 不为空或 status 取值为 completed),conclusion 必填参数。
当前字段取值为 action_required 时,应在 details_url 提供详情地址。
当任务结束,提供了结论将自动设置该检查任务为 completed 状态。将再也无法更改该结论
outputobjectformData选填,检查任务结束后提供的检测报告,具体数据结构参照下方 《门禁检查报告数据结构》
actionsobjectsformData选填,在门禁检查相关界面上显示一个按钮,点击提醒你的做额外的事情

获取某个检查任务

GET /repos/{owner}/{repo}/check-runs/{check_run_id}

参数名数据类型参数描述
ownerstring必填,仓库所在的空间地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 oschina
repostring必填,仓库地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 git-osc
check_run_idinteger调用 创建一个检查任务 接口并成功创建检查任务后返回的检查项 ID

更新某个检查任务

PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}

参数名数据类型参数所在位置参数描述
ownerstringpath仓库所在的空间地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 oschina
repostringpath仓库地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 git-osc
namestringformData必填参数,检查任务名称,如:ci-pipeline-runn
check_run_idintegerformData调用 创建一个检查任务 接口并成功创建检查任务后返回的检查项 ID
details_urlstringformData门禁服务提供的链接
statusstringformData当前状态。值域 queued, in_progress, completed. 默认:queued
started_atstringformData检查任务开始时间,要求时间格式为 ISO 8601
completed_atstringformData检查任务完成时间,要求时间格式为 ISO 8601
conclusionstringformData当 completed_at 不为空或者状态是 completed 时必填参数,检查任务最终的结论。值域为:action_required, cancelled, failure, neutral, success, skipped, stale, timed_out。当值为 action_required 时,应在 details_url 提供详情 url。注意:提供了结论将自动设置该检查任务为 completed 状态。将再也无法更改该结论
outputobjectformData检测报告,可以接受输出各种数据,具体数据结构参照 创建一个检查任务->检查任务报告属性
actionsobjectsformData在 Gitee 界面上显示一个按钮,具体数据结构参照 创建一个检查任务->检查任务报告属性

获取某个检查任务注释

GET:/repos/{owner}/{repo}/check-runs/{check_run_id}/annotations

参数名数据类型参数所在位置参数描述
ownerstringpath仓库所在的空间地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 oschina
repostringpath仓库地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 git-osc
check_run_idinteger-调用 创建一个检查任务 接口并成功创建检查任务后返回的检查项 ID
per_pageinteger-可选参数,单次请求获取的最大数据量,最大值为 100,默认值为 20
pageinteger-可选参数,请求的页数,默认值为 1

获取指定仓库上某个提交对应的检查任务

GET /repos/{owner}/{repo}/commits/{ref}/check-runs

参数名数据类型参数所在位置参数描述
ownerstringpath仓库所在的空间地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 oschina
repostringpath仓库地址,以 https://gitee.com/oschina/git-osc 为例,repo 取值为 git-osc
refstring-指定仓库上指定提交的 Commit SHA
check_namestring-Returns check runs with the specified name.
statusstring--
per_pageinteger--
pageinteger--

数据结构

检查结果报告数据结构

门禁检查的报告通过在 门禁检查任务 中指定 output 字段,定义并输出具体的报告内容给到 Gitee,Gitee 将解析报告中包含的信息,并在门禁检查任务的详情上展示出来。以下为 门禁检查报告 的具体数据结构:

参数名数据类型参数描述
titlestring必填参数,检查任务报告的标题
summarystring必填参数,检查项的总结概述,该属性支持 Markdown 格式
textstring选填,检查项详细内容。该属性支持 Markdown 格式
annotationsarray of objects选填,用于将分析结果声明并注释到对应的代码上。具体数据结构参照下方 分析注释数据结构
imagesarray of objects选填,在报告中添加图像,图片将会展示在 UI 界面中。具体数据结构参照下方 分析注释数据结构

检查报告 annotations 属性数据结构

门禁检查报告中,output 字段的 annotations 属性,可以通过声明的方式,将分析信息以注释的形式标注到代码行中,让用户可以在看代码的同时看到详细的分析结果。

标注后的注释可以在 Pull Request 详情 > 文件 选项卡看到。

参数名数据类型参数描述
pathstring必填参数,指定标注的文件路径,如:README.mdsrc/main/example.java
start_lineinteger必填参数,注释的起始行号
end_lineinteger必填参数,注释的结束行号
start_columninteger选填,注释起始列数,当 start_lineend_line 不相等时省略
end_columninteger选填,注释结束列数,当 start_lineend_line 不相等时省略
annotation_levelstring选填,注释的等级。具体值可以是以下值的其中一个:
- notice: 提醒
- warning: 警告
- failure:失败错误
messagestring必填参数,对这几行代码的反馈的简短描述
titlestring选填,注释的标题
raw_detailsstring选填,注释的详细信息

检查报告 images 属性数据结构

门禁检查报告中,output 字段的 images 属性,可以通过声明的方式,将图片添加到报告中,图片将会展示在 UI 界面中。

参数名数据类型参数描述
altstring必填参数,图片名
image_urlstring必填参数,图片地址
captionstring图片描述

检查任务扩展操作 (actions) 数据结构

在门禁检查任务中,第三方服务可以通过定义 actions 属性,实现在门禁检查相关界面上显示一个按钮,用于在门禁检查任务详情中,被动触发与检查项所在服务之间的交互。以下为 门禁检查任务扩展操作 的具体数据结构:

参数名数据类型参数描述
labelstring必填参数,展示在 UI 界面上的标签
descriptionstring必填参数,描述具体操作的描述。
identifierstring必填参数,扩展操作的唯一标识

检查 WebHook 数据结构说明

当第三方服务在调用门禁检查项相关接口时,平台会通过 WebHook 将相关事件异步通知到第三方服务。具体 WebHook 通知数据结构如下:

WebHook 字段类型字段描述
actionstring该字段表示当前用户触发的事件类型,具体值可以是以下值的其中一个:
  • created: 创建检查任务
  • completed: 当检查任务的状态变成完成
  • rerequested: 当用户在 UI 界面上重新运行检查任务
  • requested_action: 用户使用检查项提供的功能按钮
requested_actionstring第三方门禁检查服务在创建检查任务时,在门禁检查任务扩展操作 (actions) 中自定义的唯一标识 identifier 的值
check_runobject被触发检查任务的详细信息
projectobject被触发检查任务所在仓库信息
senderobject触发检查任务操作的用户信息

通过保护分支设置 Pull Request 准入规则

在保护分支策略里,设置「要求门禁状态成功才能合并」,勾选检查项,点击保存。在后续 Pull Request 创建检查时,如果设置「要求门禁状态成功才能合并」的检查项没有成功,该 Pull Request 是不允许合并的。

注意事项
  1. 最近一周执行过的检查项才能被筛选
  2. 如果设置「要求门禁状态成功才能合并」的检查项没有成功,仓库管理员可以跳过这个限制强制合并 Pull Request