
# CodeArts Check通过调用API执行MR增量检查
#### 应用场景
在用户实际的使用场景中，用户往往有构建自己的代码质量管控平台，集成代码检查及其他检查项的需求。并且在用户的应用场景中，MR合入过程中的质量监控是一个高频应用场景。
本示例介绍如何通过调用CodeArtsCheck API方式，执行MR增量代码检查并获取检查结果。通过调用CodeArtsCheck API可以不使用华为云前端，从而构建自己的全流程代码质量管控平台，同时也可以实现对非Codearts Repo代码仓的门禁级检查。本示例将以通用Git为例，进行方案介绍。
#### 约束限制
- 每个通用Git扩展点仅能对接单个代码仓地址，同时1个CodeArts项目下的扩展点数量限制为1000。
- 示例仅介绍如何调用CodeArtsCheck API以实现执行MR增量代码检查并获取检查结果的功能，具体集成方式请用户根据实际业务场景选择。
 
#### 前提准备
已[开通并授权使用代码检查服务](https://support.huaweicloud.com/usermanual-codecheck/codeartscheck_01_9000.html)。
#### 操作流程
表1操作流程 
| **流程**                                                         | **说明**                                              |
|:---|:---|
| [创建代码检查任务所属项目]    | 为本实践新建项目。                                           |
| [新建通用Git服务扩展点]   | 本实践检查第三方代码仓的代码质量，代码检查服务需通过CodeArts提供的扩展插件连接到第三方代码仓。 |
| [获取服务扩展点ID]        | 获取服务扩展点ID，在使用API时需要填写。                              |
| [创建MR检查任务并获取任务ID] | 创建代码检查任务并获取任务ID。                                    |
| [执行并查询MR任务状态]      | 通过执行脚本，执行代码检查任务。                                    |
| [查询缺陷详情]          | 通过API查询缺陷详情。                                        |
   
 #### 创建代码检查任务所属项目
1. 使用华为云账号[登录华为云控制台页面](https://console.huaweicloud.com/console)。
2. 单击页面左上角![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002051102128.png)，在服务列表中选择"开发与运维 \> 华为云码道 CodeArts"。
3. 单击"立即使用"，进入CodeArts服务首页。
4. 在首页单击"新建 \> 新建项目"，选用"Scrum"项目模板。项目名称填写"Scrum01"，其他参数保持默认即可。
5. 单击"确定"后，进入到"Scrum01"项目下。
 
 #### 新建通用Git服务扩展点
服务扩展点（Endpoint）是华为云码道的一种扩展插件，为软件华为云码道提供链接第三方代码仓的能力。
代码检查服务默认检查CodeArts Repo服务的代码质量，同时也可使用服务扩展点连接第三方代码仓库检查代码质量。
1. 在项目下的CodeArts Check服务页面的导航栏选择"设置 \> 通用设置 \> 服务扩展点管理"。
2. 单击"新建服务扩展点"，在下拉列表中选择"通用Git"。
3. 在弹框中配置以下信息，单击"确定"。 
   表2新建通用Git服务扩展点 
   | **参数**          | **说明**                                                 |
   |:---|:---|
   | 连接名称            | 自定义，支持中文、英文、数字、"-"、"_"、"."、空格，不超过256个字符。例如：Endpoint01。 |
   | Git仓库Url        | 输入待连接的Git仓库的https地址。                                   |
   | 用户名             | 输入待连接的Git仓库的用户名，不超过300个字符。                             |
   | 密码或Access Token | 输入待连接的Git仓库的密码，不超过300个字符。                              |
      
   
   
 
 #### 获取服务扩展点ID
1. 在服务扩展点详情页，按键盘"F12"，选择"Network"页签。
2. 单击扩展点名称，其中"user_permission"为服务扩展点ID。 
   图1服务扩展点ID   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002159800845.png "点击放大")
   
   
 
 #### 创建MR检查任务并获取任务ID
1. 以下为新建全量任务的请求示例。 
   增量检查任务依赖于全量任务，所以需要先创建全量任务。
   ```
   CreateTask：POST /v2/{project_id}/task
   {
     "git_url": "https://codehub-dg-g.huawei.com/userID/CloudBuildTest01.git", #如果使用CodeArts Repo代码仓，需具备Repo仓的相关权限且需填写ssh地址
     "git_branch": "master",
     "language": [
       "JAVA"
     ],
     "task_type": "full", #任务类型
     "username": "zxxxw", #用户名，仅在三方仓场景下使用
     "access_token": "f2xxxb0", #密码或用户token，仅在三方仓场景下使用
     "endpoint_id": "fxxxxxsz" #服务扩展点ID
   }
   ```
   
   
2. 新建全量任务的返回结果。响应值为全量任务的任务ID，即创建增量任务需要用到的"parent_task_id"。 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002124575866.png "点击放大")
   创建全量任务后，可在华为云对应局点账号下的项目中，查看到新建的代码检查任务。
   
   
3. 新建MR增量代码检查任务的请求示例。 
   ```
   CreateTask：/v2/{project_id}/task
   {
     "git_url": "https://codehub-dg-g.huawei.com/userID/CloudBuildTest01.git",#如果使用CodeArts Repo代码仓，需具备Repo仓的相关权限且需填写ssh地址
     "git_branch": "master",
     "language": [
       "JAVA"
     ],
     "task_type": "inc", #任务类型
     "inc_config": {
       "parent_task_id": "8cxxx94", #全量任务id，增量任务挂载在全量任务下
       "git_source_branch": "dev003", #源分支
       "git_target_branch": "dev002", #目标分支
       "merge_id": "4", #MR编号，用于检查插件拉取增量代码
       "event_type": "merge_request", #事件类型，MR请求
       "action": "open", #状态，open为MR开启状态
       "title": "测试" #任务标题，根据需求填写
     }
   }
   ```
   
   
4. 新建增量任务的返回结果。 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002124577518.png "点击放大")
   响应值为增量任务的任务ID，该ID在任务列表界面不可见，仅用于通过API接口创建、执行和查询MR任务的场景。
   
   
 
 #### 执行并查询MR任务状态
1. 执行MR任务的请求示例。 
   ```
   RunTask：POST /v2/tasks/{task_id}/run
   {
   }
   ```
   - "task_id"中填写创建MR检查任务并获取任务ID中获取的MR任务ID以执行检查任务。
   
   - 请求体参数，空传即可。
   
   
   
   
2. 执行MR任务的返回结果。 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002159999881.png "点击放大")
   响应值为MR任务对应的执行ID，也就是1个任务1次执行产生的1个job的ID。
   
   
3. 轮询任务执行状态请求示例。 
   ```
   ShowProgressDetail：GET /v2/tasks/{task_id}/progress
   ```
   "task_id"中填入MR任务ID以查询任务执行状态，任务状态0表示检查中，1表示检查失败，2表示检查成功，3表示任务中止。
   
   
4. 轮询任务执行状态的返回结果。 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002159882821.png "点击放大")
   
   
 
 #### 查询缺陷详情
1. 查询缺陷详情请求示例。 
   ```
   ShowTaskDefects：GET /v2/tasks/{task_id}/defects-detail
   ```
   "task_id"中填入MR任务ID以查询缺陷详情，也可以通过其他接口查询概要等信息，更多使用方法参考[API接口说明文档手册](https://support.huaweicloud.com/api-codecheck/ListRules.html)。
   
   
2. 查询缺陷详情的响应结果。 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002124763966.png "点击放大")
   
   
 
#### 相关文档
- 本示例中所有接口均可在[华为云OpenAPI调试平台](https://console.huaweicloud.com/apiexplorer/#/openapi/CodeArtsCheck/debug?api=CreateTask)进行对应调试。
- 新建代码检查任务的API接口说明可参考[新建检查任务](https://support.huaweicloud.com/api-codecheck/CreateTaskV2.html)。
- 执行代码检查任务的API接口说明可参考[执行检查任务](https://support.huaweicloud.com/api-codecheck/RunTaskV2.html)。
- 查询任务执行状态的API接口说明可参考[查询任务执行状态](https://support.huaweicloud.com/api-codecheck/ShowProgressDetailV2.html)。
 
