
# 不上传代码到云服务的情况下使用代码检查服务
#### 应用场景
部分用户的代码有严格的保密机制，不允许将代码上传到外部网络，用户希望仅在信任的自有执行机上完成代码扫描服务。华为云CodeArts Check为此提供本实践的扫描方案，在不上传代码到云服务的情况下使用代码检查服务检查代码问题。
#### 约束限制
使用自定义执行机功能为受限功能，如需使用，请[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)联系技术支持工程师。
#### **资源与成本规划**
本实践需购买虚拟专用网络VPN，关于VPN的购买费用可参考[价格计算器](https://support.huaweicloud.com/price-vpn/vpn_price_00001.html)。
#### 前提准备
- 已在私有网络创建自定义执行机。执行机规格为CentOS 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)操作。）
   
- 需确保本地执行机yum源可用，详情可参考[使用自动化工具配置华为云镜像源](https://support.huaweicloud.com/ecs_faq/zh-cn_topic_0118948562.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操作流程 
| **流程**                                                                  | **说明**                                                                          |
|:---|:---|
| [配置VPN连接云下数据中心与云上VPC（可选）] | 可选操作。本地网络无法访问公网时需要配置。 配置本地网络可以访问云上VPC。 |
| [新建项目]                     | 为本实践新建项目。                                                                       |
| [新建自定义执行机资源池]             | 为本实践新建所需的自定义执行机资源池。                                                             |
| [新建通用Git服务扩展点]              | 创建服务扩展点，可访问用户使用的第三方代码仓。                                                         |
| [创建并执行代码检查任务]            | 创建代码检查任务并配置使用自定义执行机执行检查。通过该实践的方案进行的扫描，不会将代码上传至云服务。                              |
   
 #### 配置VPN连接云下数据中心与云上VPC（可选操作）
**本地网络无法访问公网时需要配置。**
图1方案架构   
![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002263390174.png "点击放大")
1. 参考[创建虚拟私有云和子网](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0013935842.html)创建"华北-北京四"的VPC。
2. 参考[创建VPN网关](https://support.huaweicloud.com/qs-vpn/vpn_03_0005.html)，购买并创建"华北-北京四"的VPN网关。
   
   购买后可在[虚拟专用网络VPN页](https://console.huaweicloud.com/cc/?agencyId=b59d320fb9f940be88873d96b809c7d5&region=cn-north-4&locale=zh-cn#/vpnvgw/history/gws)中查看到已创建的VPN网关，如下图所示。
   图2VPN网关   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002171465806.png "点击放大")
   
   
3. 参考[创建VPN连接](https://support.huaweicloud.com/usermanual-vpn/vpn_04_0605.html)，购买并创建"华北-北京四"的VPN连接。
   
   购买后可在[虚拟专用网络VPN页](https://console.huaweicloud.com/cc/?agencyId=b59d320fb9f940be88873d96b809c7d5&region=cn-north-4&locale=zh-cn#/vpnvgw/history/conns)中查看到已创建的VPN连接，如下图所示。
   图3VPN连接   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002206592269.png "点击放大")
   其中"本端网关"和"本端子网"填写的是[2]中的网关和子网，"远端网关"和"远端子网"填写的是本地网络的网关和子网。
   
   
4. 参考[创建VPN连接](https://support.huaweicloud.com/usermanual-vpn/vpn_04_0605.html)，购买并创建本地网络的VPN连接。
   
   其中"本端网关"和"本端子网"填写的是本地网络的网关和子网，"远端网关"和"远端子网"填写的是[2]中华为云的网关和子网。
   
   
5. 在[终端节点控制台页面](https://console.huaweicloud.com/vpc/?agencyId=95689b7de90349a7bfef2797430d26d7&region=cn-north-4&locale=zh-cn#/ep/list)，按照[表2]购买"华北-北京四"的VPC终端节点VPCEP。其他参数保持默认即可。
   
    表2终端节点购买信息 
   |    区域     |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     华北-北京四                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   |---|---|
   | **服务类别**  | 按名称查找服务                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | **服务名称**  | 依次购买以下节点。 - 如果是华北-北京四： - APIG：com.myhuaweicloud.cn-north-4.api  - Octopus：cn-north-4.octopus-customer.240cf05d-34cb-48a7-a8a3-443cd496de27  - SWR：com.myhuaweicloud.cn-north-4.swr  - OBS：cn-north-4.com.myhuaweicloud.v4.obsv2.OBSCluster9  - Mirror：repo2.myhuaweicloud.com    - 如果是广州： - APIG：com.myhuaweicloud.cn-south-1.api  - Octopus：cn-south-1.octopus-customer.3da50262-7b47-45c0-b26c-9e19dc155f5d  - SWR：swr.cn-south-1.myhuaweicloud.com  - OBS：cn-south-1.com.myhuaweicloud.v4.obsv2  - Mirror：repo.myhuaweicloud.com     |
   | **虚拟私有云** | 选择[1]中购买的VPC。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
      
   购买后可在[终端节点列表页](https://console.huaweicloud.com/vpc/?region=cn-north-4&locale=zh-cn#/ep/list)查看已购买的终端节点，如下图所示。
   图4终端节点   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002206746677.png "点击放大")
   
   
6. 在本地的执行机中执行ping命令，对[5]中购买的任意一个终端节点IP进行连通性测试。出现以下相似结果，表示本地执行机可以访问终端节点。
   
   图5连通性测试结果   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002171306090.png "点击放大")
   
   
7. 在用户本地执行机上执行以下命令，确认OBS的域名解析IP。
   
   确认"华北-北京四"的OBS：
   ```
   dig secdev-codecheck-cn-north-4-01.obs.cn-north-4.myhuaweicloud.com
   dig op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com
   ```
   确认"广州"的OBS：
   ```
   dig cn-south-1-obs-codecheck-v2.obs.cn-south-1.myhuaweicloud.com
   dig op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com
   ```
   ![](https://support.huaweicloud.com/bestpractice-codecheck/public_sys-resources/note_3.0-zh-cn.png)
   如果执行机未安装dig工具，可执行yum install bind-utils命令进行安装。
   图6"华北-北京四"域名解析结果一   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002171465814.png "点击放大")
   图7"华北-北京四"域名解析结果二   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002206592273.png "点击放大")
   如[图6]和[图7]所示，解析到"华北-北京四"的OBS域名IP为"x.x.x194/31"和"122.x.x.x/31"网段。
   
   
8. 分别在[3]VPN连接的"本端子网"和[4]VPN连接的"远端子网"中添加[7]的网段。
   
   图8修改VPN连接   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002206746681.png "点击放大")
   图9添加远端子网   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002171306094.png "点击放大")
   
   
9. 在本地网络配置DNS域名解析。 
   - 方式一：（本地已安装DNS服务器） 参考[创建内网域名](https://support.huaweicloud.com/usermanual-dns/zh-cn_topic_0057773658.html)（需要创建内网域名和添加记录集），创建[表3]的域名。
      表3DNS域名 
     | 服务      | 华北-北京四域名                                    | 广州域名                                        | IP                                                          |
     |:---|:---|:---|:---|
     | SWR     | swr.cn-north-4.myhuaweicloud.com            | swr.cn-south-1.myhuaweicloud.com            | [5]中SWR对应的服务地址     |
     | Octopus | agent.codearts.cn-north-4.myhuaweicloud.com | agent.codearts.cn-south-1.myhuaweicloud.com | [5]中Octopus对应的服务地址 |
     | APIG    | cloudoctopus.cn-north-4.myhuaweicloud.com   | cloudoctopus.cn-south-1.myhuaweicloud.com   | [5]中APIG对应的服务地址    |
     | Mirror  | mirrors.huaweicloud.com                     | mirrors.huaweicloud.com                     | [5]中Mirror对应的服务地址  |
        
     
   
   - 方式二：（本地未安装DNS服务器） 在本地执行机的"/etc/hosts/"文件中增加以下配置。
     ```
     ${SWR对应的VPCEP IP} swr.cn-north-4.myhuaweicloud.com
     ${Octopus对应的VPCEP IP} agent.codearts.cn-north-4.myhuaweicloud.com
     ${APIG对应的VPCEP IP} cloudoctopus.cn-north-4.myhuaweicloud.com
     ${Mirror对应的VPCEP IP} mirrors.huaweicloud.com
     ```
     
   
   
   
   
10. 在本地的执行机中执行以下命令，进行连通性测试。 
    "华北-北京四"的OBS：
    ```
    ping swr.cn-north-4.myhuaweicloud.com
    ping agent.codearts.cn-north-4.myhuaweicloud.com
    ping cloudoctopus.cn-north-4.myhuaweicloud.com
    ping mirrors.huaweicloud.com
    ping secdev-codecheck-cn-north-4-01.obs.cn-north-4.myhuaweicloud.com
    ping cloud-octopus-agent.obs.cn-north-4.myhuaweicloud.com
    ping op-svc-swr-b051-10-38-19-62-3az.obs.cn-north-4.myhuaweicloud.com
    ```
    "广州"的OBS：
    ```
    ping swr.cn-south-1.myhuaweicloud.com
    ping agent.codearts.cn-south-1.myhuaweicloud.com
    ping cloudoctopus.cn-south-1.myhuaweicloud.com
    ping mirrors.huaweicloud.com
    ping cn-south-1-obs-codecheck-v2.obs.cn-south-1.myhuaweicloud.com
    ping cloud-octopus-agent.obs.cn-south-1.myhuaweicloud.com
    ping op-svc-swr-b051-10-230-33-197-3az.obs.cn-south-1.myhuaweicloud.com
    ```
    
    
    
11. 参考[挂载云硬盘](https://support.huaweicloud.com/usermanual-evs/evs_01_0107.html)。其中挂载目录为"/devcloud"。
 
 #### 新建项目
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_0000002051262156.png)，选择"租户设置"。
2. 选择"资源池管理 \> 资源池"。
3. 单击"新建资源池"，在弹出的窗口中参考[表4]配置参数后，单击"保存"。
   
    表4资源池配置参数说明 
   | **参数名称**         | **参数说明**                                          |
   |:---|:---|
   | 资源池名称            | 资源池的名称，根据需要自定义。例如：custom_pool。                    |
   | 资源池类型            | 选择LINUX_DOCKER。执行任务时将拉起一个Linux docker容器，任务在容器中运行。 |
   | 资源池描述            | 根据需要输入资源池描述。可不填写。                                 |
   | 资源池可以被租户下所有子用户使用 | 勾选后，此资源池可以被当前租户下所有子用户使用。可不勾选。                     |
      
   
   
4. 单击新建的资源池名称"custom_pool"，进入到资源池配置页面。
5. 单击"新建代理"，在弹出的窗口中，参考[表5]配置代理信息，其他参数项保持默认即可。
   
    表5新建代理参数说明 
   | **参数**     | **说明**                                                                                  |
   |:---|:---|
   | 自动安装Git    | 关闭开关，参考"如何手动安装Git？"安装Git。                                                               |
   | 是否安装Docker | 勾选此项，安装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. 勾选协议，依次单击"生成命令"和"复制命令"。单击"关闭"。
   
   图10新建代理   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002087381297.png "点击放大")
   
   
7. 根据"步骤三"提示，在执行机上执行[6]中复制的命令。
8. 在代理列表页面，单击"刷新列表"，后台自动同步信息后，代理列表中会增加一条代理执行机信息。代理执行机的代理别名为"agent_test_custom-mwlye1NlLG"。 
   图11代理执行机   
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002087262705.png "点击放大")
   
   
 
 #### 新建通用Git服务扩展点
服务扩展点（Endpoint）是华为云码道的一种扩展插件，为华为云码道提供链接第三方代码仓的能力。
代码检查服务默认检查CodeArts Repo服务的代码质量，同时也可使用服务扩展点连接第三方代码仓库检查代码质量。
1. 在项目下的CodeArts Check服务页面的导航栏选择"设置 \> 通用设置 \> 服务扩展点管理"。
2. 单击"新建服务扩展点"，在下拉列表中选择"通用Git"。
3. 在弹框中配置以下信息，单击"确定"。 
   表6新建通用Git服务扩展点 
   | **参数**          | **说明**                                                 |
   |:---|:---|
   | 连接名称            | 自定义，支持中文、英文、数字、"-"、"_"、"."、空格，不超过256个字符。例如：Endpoint01。 |
   | Git仓库Url        | 输入待连接的Git仓库的https地址。                                   |
   | 用户名             | 输入待连接的Git仓库的用户名，不超过300个字符。                             |
   | 密码或Access Token | 输入待连接的Git仓库的密码，不超过300个字符。                              |
      
   
   
 
 #### 创建并执行代码检查任务
1. 在页面导航栏中选择"代码 \> 代码检查"。
2. 单击"新建任务"，进入"新建任务"页面。 
   - "代码源"选择"通用Git"。
   
   - "任务名称"自定义填写"CheckTask01"。
   
   - "Endpoint实例"选择[新建通用Git服务扩展点]中创建的服务扩展点"Endpoint01"。
   
   
   其他参数保持默认即可。
   
   
3. 单击"新建任务"，完成检查任务的创建。
4. 在代码检查详情页面，选择"设置 \> 自定义环境"。
5. 在"执行主机"区域，选择"自定义资源池"。
6. 在下拉框中选择[新建自定义执行机资源池]中创建的资源池"custom_pool"。
7. 配置完成后，单击"保存"，单击"执行检查"，等待检查完成即可。
 
#### 相关文档
- 如果需要对代码检查任务进行更多配置，可参考[配置代码检查任务](https://support.huaweicloud.com/usermanual-codecheck/codecheck_01_0001.html)。
- 执行代码检查任务时常见问题请参考[代码检查常见问题](https://support.huaweicloud.com/codecheck_faq/codecheck_02_0002.html)。
 
