
# 基于第三方引擎执行代码检查
#### 应用场景
如果CodeArts Check当前提供的检查引擎不满足用户的使用需求，可使用第三方引擎检查工具执行代码检查任务。
#### 约束限制
- 自定义执行机功能为受限功能，如需使用，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)联系技术支持工程师。
 
#### 资源与成本规划
本实践需购买ECS作为自定义执行机，关于ECS的购买费用可参考[价格计算器](https://www.huaweicloud.com/pricing/calculator.html#/ecs)。
 #### 前提条件
- 已联系技术支持获取UCCP插件的代码开发样例包，如需帮助请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)联系技术支持工程师。
- 已参考[自定义购买ECS](https://support.huaweicloud.com/usermanual-ecs/ecs_03_7002.html)购买本实践使用的EulerOS 7操作系统弹性云服务器。推荐配置如下：
  - CPU：8U，内存：32G，系统盘：100G，数据盘：250G。（使用该执行机规格时，**需要** 执行[挂载云硬盘](https://support.huaweicloud.com/usermanual-evs/evs_01_0107.html)操作。）
  
  - CPU：8U，内存：32G，系统盘：250G。（使用该执行机规格时，**无需** 执行[挂载云硬盘](https://support.huaweicloud.com/usermanual-evs/evs_01_0107.html)操作。）
   
- 已在接入的自定义执行机中已安装Git-lfs，若未安装，可在执行机上参考以下命令安装Git-lfs。
  ```
  # 下载
  wget -O  git-lfs.tar.gz https://github.com/git-lfs/git-lfs/releases/download/v3.4.1/git-lfs-linux-amd64-v3.4.1.tar.gz
  # 解压
  tar -zxvf git-lfs.tar.gz
  # 进入解压后的目录
  cd  git-lfs-3.4.1
  # 执行安装脚本
  sh install.sh
  # 验证
  git lfs version
  ```
  
 
#### 操作流程
表1操作流程 
| 序号 | **流程**                                                          | **说明**                     |
|:---|:---|:---|
| 1  | [新建项目]           | 为本实践新建项目。                  |
| 2  | [新建自定义执行机资源池]    | 为本实践新建所需的自定义执行机资源池。        |
| 3  | [开发UCCP插件]        | 开发UCCP插件，用于导入自定义规则。        |
| 4  | [将第三方引擎和插件导入执行机]  | 将第三方引擎和插件导入执行机。            |
| 5  | [上传自定义规则]         | 在CodeArts Check服务中上传自定义规则。 |
| 6  | [新建CodeArts Repo代码仓] | 为本实践新建存储代码的代码仓。            |
| 7  | [创建代码检查任务]        | 为本实践创建代码检查任务。              |
| 8  | [配置代码检查任务]         | 配置代码检查任务使用自定义执行机和自定义规则。    |
| 9  | [查看检查结果]           | 查看代码检查结果。                  |
   
 #### 新建项目
1. 使用华为云账号[登录华为云控制台页面](https://console.huaweicloud.com/console)。
2. 单击页面左上角![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002329099781.png)，在服务列表中选择"开发与运维 \> 代码检查 CodeArts Check"。
3. 单击"前往代码检查"，进入CodeArts Check服务首页。
4. 在导航栏切换到"首页"页签，依次单击"新建 \> 新建项目"，选用"Scrum"项目模板。
5. 填写项目名称，例如"check-bestpractice"，其他参数保持默认即可。
6. 单击"确定"后，进入到"check-bestpractice"项目下。
 
 #### 新建自定义执行机资源池
1. 在导航栏中单击用户名![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002295052789.png)，选择"租户设置"。
2. 选择"资源池管理 \> 资源池"。
3. 单击"新建资源池"，在弹出的窗口中参考[表2]配置参数后，单击"保存"。
   
    表2资源池配置参数说明 
   | **参数名称**         | **参数说明**                                          |
   |:---|:---|
   | 资源池名称            | 资源池的名称，根据需要自定义。例如：custom_pool。                    |
   | 资源池类型            | 选择LINUX_DOCKER。执行任务时将拉起一个Linux docker容器，任务在容器中运行。 |
   | 资源池描述            | 根据需要输入资源池描述。可不填写。                                 |
   | 资源池可以被租户下所有子用户使用 | 勾选后，此资源池可以被当前租户下所有子用户使用。可不勾选。                     |
      
   
   
4. 单击新建的资源池名称"custom_pool"，进入到资源池配置页面。
5. 单击"新建代理"，在弹出的窗口中，参考[表3]配置代理信息，其他参数项保持默认即可。
   
    表3新建代理参数说明 
   | **参数**     | **说明**                                                                                  |
   |:---|:---|
   | 是否安装Docker | 勾选此项，需要安装Docker。                                                                        |
   | 自动安装Docker | 打开开关，自动安装Docker。                                                                        |
   | AK         | 参考[获取AK/SK](https://support.huaweicloud.com/devg-apisign/api-sign-provide-aksk.html)获取。 |
   | SK         | 参考[获取AK/SK](https://support.huaweicloud.com/devg-apisign/api-sign-provide-aksk.html)获取。 |
   | 代理名称       | 自定义代理名称。例如：agent_test_custom。                                                           |
   | 代理工作空间     | 填写代理工作空间，需符合标准的linux目录格式。例如：/opt/agent_test_custom。                                     |
      
   
   
6. 勾选协议，依次单击"生成命令"和"复制命令"，然后单击"关闭"。
   
   图1新建代理   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002260475764.png "点击放大")
   
   
7. 根据"步骤三"提示，在弹性云服务器列表页，单击[前提条件]中购买的服务器所在行的"远程登录"，执行[6]中复制的命令。
8. 在代理列表页面，单击"刷新列表"，后台自动同步信息后，代理列表中会增加一条代理执行机信息。代理执行机的代理别名为"agent_test_custom-mwlye1NlLG"。 
   图2代理执行机   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002295005861.png "点击放大")
   
   
   
 
 #### 开发UCCP插件
1. 将[前提条件]中获取到的开发样例包"PluginExtensionPointDemo.zip"解压至本地。
2. 找到工程根目录下的"pom.xml"文件，将"\<plugin.name\>DemoEngine\</plugin.name\>"修改为新接入的引擎名称"\<plugin.name\>cmetrics\</plugin.name\>"。
3. 找到类"ThirdPartyToolsPlugin.java"，将名称更改为[2]中新接入的引擎名称，例如"CmetricsToolsPlugin"。
   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002261553318.png "点击放大")
   
   注意更改构造函数名称需与文件名保持一致。
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002296146465.png "点击放大")
   
   
   
   
4. 修改"settings"文件，更改为外部可下载依赖的仓库。 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002261496420.png "点击放大")
   
   
   
5. 实现"CmetricsToolsPlugin"中"execute"方法。 
   入参说明如下：
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002296033409.png "点击放大")
   
   返回一个缺陷列表文件即可，缺陷字段说明见下图：
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002261553338.png "点击放大")
   
   
   
6. 建议在"execute"中间调用引擎脚本，直接由引擎生成"defect"缺陷列表文件。
 
 #### 将第三方引擎和插件导入执行机
1. 在执行机"/opt/cloud/"目录下，执行以下命令，创建"third_party_tools/v1/plugins"目录。 
   ```
   mkdir -p /opt/cloud/third_party_tools/v1/plugins
   ```
   
   
2. 在自定义执行上将开发完成的UCCP插件放入工具插件路径"/opt/cloud/third_party_tools/v1/plugins"，然后执行以下命令更改权限。 
   ```
   chmod -R 777 [所换包的路径] &
   chown -R slave1:slave1 [所换包的路径] &
   ```
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002261341272.png "点击放大")
   
   
   
3. 将工具包放入工具路径"/opt/cloud/third_party_tools/v1/tools"，然后执行以下命令更改权限。 
   ```
   chmod -R 777 [所换包的路径] &
   chown -R slave1:slave1 [所换包的路径] &
   ```
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002261341832.png "点击放大")
   
   
   
上述插件路径和工具路径中的"v1"代表"版本号"。可以同时存在多个版本，例如"/opt/cloud/third_party_tools/v1/plugins"、"/opt/cloud/third_party_tools/v2/plugins"、"/opt/cloud/third_party_tools/v3/plugins"。在执行任务时，会选择最大的版本号执行任务。例如在这里会选择/opt/cloud/third_party_tools/v3/plugins下的插件来执行任务。此规则同样适用于"tools"。
 #### 上传自定义规则
1. 进入代码检查首页，在"规则"页面，单击"新建规则"，选择"批量导入规则"。
   
   批量导入规则可以导入任一引擎，任一语言的规则。
   图3批量导入规则   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002330953933.png)
   
   
2. 代码检查服务提供了固定的表格模板，必须按照模板填写规则信息，才能成功导入。 
   图4上传规则文件   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002295774637.png "点击放大")
   
   
3. 导入成功后，在左边选择"自定义规则"，就可以看到[1]中导入的规则。
   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002295701581.png "点击放大")
   
   自定义规则可由创建者进行编辑和删除。单击"管理"，可以修改规则信息，或者删除此条规则。
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002563020432.png "点击放大")
   
   
   
 
 #### 新建CodeArts Repo代码仓
1. 在导航栏中选择"服务 \> 代码托管"，进入代码托管服务首页。
2. 在代码托管页面，单击"新建仓库"。
3. 在新建仓库页面，选择"按模板新建"。
4. 单击"下一步"，搜索并选择"Java Maven Demo"模板。
5. 单击"下一步"，仓库名称填写"custom_repo"，"自动创建代码检查任务"参数需要去除勾选。其他参数保持默认即可。
6. 单击"确定"，完成代码仓的创建。 
   创建完成后的代码仓文件目录如[图5]所示。
   图5代码仓文件目录   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002261618674.png)
   
   
 
 #### 创建代码检查任务
1. 在代码检查任务列表页，单击"新建任务"，按照如[表4]配置参数。
   
    表4代码检查任务参数说明 
   | **参数** | **说明**                                                                                               |
   |:---|:---|
   | 归属项目   | [创建代码检查任务所属项目]中创建的项目名称"check-bestpractice"。默认填写，无需配置。 |
   | 代码源    | 选择需要检查的代码来源。选择"Repo"。                                                                                |
   | 任务名称   | 代码检查任务名称，可自定义。例如：CheckTask01。                                                                        |
   | 仓库     | 选择[新建CodeArts Repo代码仓]中创建的代码仓"custom_repo"。               |
   | 分支     | 保持默认"master"即可。                                                                                      |
   | 检查语言   | 选择"Java"。                                                                                            |
      
   
   
2. 单击"确定"，完成代码检查任务的创建。
 
 #### 创建自定义规则集
1. 在代码检查任务列表页，单击"规则集"页签，进入规则集列表页面。
2. 单击"新建规则集"，在弹出的窗口设置"规则集名称"为"RuleList"，"检查语言"为"Java"。
3. 单击"确定"，进入到"规则集配置"页面。
4. 勾选[上传自定义规则]中规则，单击右上角"保存"。
 
 #### 配置代码检查任务
1. 在代码检查任务列表页单击代码检查任务名称，进入代码检查任务详情页。
2. 单击"设置"。
3. 单击"规则集"，在右侧区域单击![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002296146485.png)，选择[创建自定义规则集]中创建的规则集"RuleList"。
4. 单击右上角"执行检查"。
 
 #### 查看检查结果
1. 在代码检查页面任务列表中，搜索[创建代码检查任务]创建的任务名称"CheckTask01"。
2. 单击任务名称，查看代码检查详情，包括概览、代码问题、代码度量、检查日志等。
 
