
# 手工制作SonarQube工具镜像
#### 制作SonarQube镜像
若需要使用SonarQube社区版本，可以在如下官方链接中获取：[SonarQube Server](https://binaries.sonarsource.com/?prefix=Distribution/sonarqube/)、[SonarScanner CLI](https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli/)。
1. 登录一台安装有docker命令的linux机器，在任意目录下创建一个空目录，此处以 "sonarqubecustom" 为例。
2. 在"sonarqubecustom"目录下执行命令 "mkdir sonarqube_webservice2504" 和 "mkdir sonarqube"，创建两个目录（目录名称任意）分别用于存放"SonarQube Server"和"SonarScanner CLI"，如下： 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002614009313.png "点击放大")
   
   
3. 将"SonarQube Server"放入"sonarqube_webservice2504"目录，结构如下： 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002583649542.png "点击放大")
   将"SonarScanner CLI"放入"sonarqube"目录，结构如下：
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002583489624.png "点击放大")
   
   
4. 在"sonarqubecustom"目录下执行命令"mkdir jdk"和 "mkdir nodejs"，创建两个目录（目录名称任意）分别用于存放SonarQube运行所需的jdk环境和nodejs环境，如下： 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002613889423.png "点击放大")
   
   
5. 将jdk环境放入"jdk"目录，结构如下： 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002614009315.png "点击放大")
   将Node.js环境放入"nodejs"目录，如果用户不检查JavaScript/TypeScript/CSS语言，则无需Node.js，结构如下：
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002583649544.png "点击放大")
   
   
6. 在"sonarqubecustom"目录下执行命令"mkdir compile_jdk"和"mkdir maven"，创建两个目录（名称任意）分别用于存放编译用户代码所需的jdk和maven环境，如下： 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002583489626.png "点击放大")
   
   
7. 将编译用户代码所需的jdk环境放入"compile_jdk"目录，结构如下： 
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002613889425.png "点击放大")
   将编译用户代码所需的maven环境放入"maven"目录，结构如下：
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002614009317.png "点击放大")
   
   
8. 在"sonarqubecustom"目录下执行命令"vim Dockerfile"创建"Dockerfile"文件，删除[Dockerfile模板](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1014.html#codeartscheck_14_1014__zh-cn_topic_0000002501460678_section067315519324)中的"USER build"，并添加如下内容：
   
   ```
   RUN mkdir -p /usr/local/tools/sonarqubecustom
   COPY ./sonarqube_webservice2504 /usr/local/tools/sonarqubecustom/sonarqube_webservice
   COPY ./sonarqube /usr/local/tools/sonarqubecustom/sonarqube
   COPY ./jdk /usr/local/tools/sonarqubecustom/jdk
   COPY ./nodejs /usr/local/tools/sonarqubecustom/nodejs
   COPY ./compile_jdk /usr/local/compile_jdk
   COPY ./maven /usr/local/maven
   RUN chmod -R 755 /usr/local/tools/sonarqubecustom
   RUN chmod -R 755 /usr/local/tools/sonarqubecustom/sonarqube_webservice
   RUN chmod -R 755 /usr/local/tools/sonarqubecustom/sonarqube
   RUN chmod -R 755 /usr/local/tools/sonarqubecustom/jdk
   RUN chmod -R 755 /usr/local/tools/sonarqubecustom/nodejs
   RUN chmod -R 755 /usr/local/compile_jdk
   RUN chmod -R 755 /usr/local/maven
   ENV JAVA_HOME=/usr/local/compile_jdk
   ENV MAVEN_HOME=/usr/local/maven
   ENV PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH
   ```
   目的是将机器上的"SonarQube Server"、"SonarScanner CLI"，及其运行所需的"jdk"和"nodejs"环境拷贝到镜像中的"sonarqubecustom"目录下，并设置好镜像中的maven编译环境。
   **注意：**
   1. 命令中加粗部分一定不能修改，其他部分都可以自定义，只要达到目的即可。
      - "SonarQube Server"所在目录在镜像中的名称必须是"sonarqube_webservice"。
      
      - "SonarScanner CLI"所在目录在镜像中的名称必须是"sonarqube"。
      
      - SonarQube运行所需的jdk和Node.js环境所在目录在镜像中的名称必须是"jdk"和"nodejs"。
       
   
   2. "/usr/local/tools"该目录支持用户自定义，但需保持一致。[配置代码检查任务](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1020.html#codeartscheck_14_1020__zh-cn_topic_0000002532635257_section2381123812236)的"镜像中自定义引擎的位置"即为此目录。
      此时的目录结构如下：
      ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002583649546.png "点击放大")
      
   
   
   
   
9. 在当前目录执行镜像构建命令 "docker build --no-cache -f Dockerfile -t \[镜像名称:版本名称\] ." 
   示例：
   ```
   docker build --no-cache -f Dockerfile -t sonarqubecustom:v1 .
   ```
   
   
10. 将制作好的镜像推送到华为云swr镜像仓库上**并将镜像设置为公开** 。可以参考[推送镜像到镜像仓库](https://support.huaweicloud.com/usermanual-swr/swr_01_0011.html)。
 
#### 导出SonarQube规则excel文件
1. 首先创建一个 CodeArts Repo 代码仓用于存放构建镜像脚本，可以参考[新建CodeArts Repo代码仓](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1020.html#codeartscheck_14_1020__zh-cn_topic_0000002532635257_section249692773316)。
2. 在代码仓根目录中新建一个目录".cloudbuild"，并在该目录下新建一个文件"build.yml"。
3. 在代码仓根目录新建两个空文件，名称分别为：excute_py.sh、generate_excel.py。 
   此时的目录结构如下图：
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002583489628.png "点击放大")
   
   
4. 将如下文本中的"\[images_address\]"替换为用户在上述步骤中上传到SWR的[SonarQube镜像地址]，然后复制写入代码仓中的".cloudbuild/build.yml"文件。
   
   ```
   ---
   version: 2.0
   steps:
     BUILD:
       - swr:
           image: [image_address]
           inputs:
             command: sh ./excute_py.sh
       - upload_artifact:
           inputs:
             path: ./output/*
   ```
   
   
5. 分别填写"excute_py.sh"和"generate_excel.py"两个文件。其内容与[1.1.1-步骤6](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1015.html#codeartscheck_14_1015__zh-cn_topic_0000002548761195_li6200104218410)和[1.1.1-步骤7](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1015.html#codeartscheck_14_1015__zh-cn_topic_0000002548761195_li1534518467404)一致。
6. 新建构建任务，参考[1.1.1-步骤8](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1015.html#codeartscheck_14_1015__zh-cn_topic_0000002548761195_li19982202126)。
7. 单击"编辑"，选择"参数设置 \> 自定义参数"。
8. 单击"立即新建"，创建第一个参数。
9. 单击"新建参数"，需要新建如下2个参数并设置默认值，详情参见[表1]：
   
    表1自定义参数表 
   | 参数名                 | 参数描述                 | 默认值示例 | 默认值说明                                                                                 |
   |:---|:---|:---|:---|
   | SONAR_USER_NAME     | SonarQube Server的用户名 | admin | 登录SonarQube Server所需的用户名（官方下载的SonarQube Server登录用户名默认为admin，如果用户修改过登录用户名称，请填写相应的用户名）。 |
   | SONAR_USER_PASSWORD | SonarQube Server的密码  | admin | 登录SonarQube Server所需的密码（官方下载的SonarQube Server登录密码默认为admin，如果用户修改过登录密码，请填写相应的密码）。      |
      
   配置完后如下图：
   ![](https://support.huaweicloud.com/bestpractice-codecheck/zh-cn_image_0000002613889427.png "点击放大")
   
   
10. 单击"保存并执行"。
11. 获取导出的SonarQube规则excel文件，参考[1.1.1-步骤12](https://support.huaweicloud.com/bestpractice-codecheck/codeartscheck_14_1015.html#codeartscheck_14_1015__zh-cn_topic_0000002548761195_li1229402117235)。
 
