更新时间:2026-06-12 GMT+08:00
分享

手工制作SonarQube工具镜像

制作SonarQube镜像

若需要使用SonarQube社区版本,可以在如下官方链接中获取:SonarQube ServerSonarScanner CLI

  1. 登录一台安装有docker命令的linux机器,在任意目录下创建一个空目录,此处以 “sonarqubecustom” 为例。
  2. 在“sonarqubecustom”目录下执行命令 “mkdir sonarqube_webservice2504” 和 “mkdir sonarqube”,创建两个目录(目录名称任意)分别用于存放“SonarQube Server”和“SonarScanner CLI”,如下:

  3. 将“SonarQube Server”放入“sonarqube_webservice2504”目录,结构如下:

    将“SonarScanner CLI”放入“sonarqube”目录,结构如下:

  4. 在“sonarqubecustom”目录下执行命令“mkdir jdk”和 “mkdir nodejs”,创建两个目录(目录名称任意)分别用于存放SonarQube运行所需的jdk环境和nodejs环境,如下:

  5. 将jdk环境放入“jdk”目录,结构如下:

    将Node.js环境放入“nodejs”目录,如果用户不检查JavaScript/TypeScript/CSS语言,则无需Node.js,结构如下:

  6. 在“sonarqubecustom”目录下执行命令“mkdir compile_jdk”和“mkdir maven”,创建两个目录(名称任意)分别用于存放编译用户代码所需的jdk和maven环境,如下:

  7. 将编译用户代码所需的jdk环境放入“compile_jdk”目录,结构如下:

    将编译用户代码所需的maven环境放入“maven”目录,结构如下:

  8. 在“sonarqubecustom”目录下执行命令“vim Dockerfile”创建“Dockerfile”文件,删除Dockerfile模板中的“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”该目录支持用户自定义,但需保持一致。配置代码检查任务的“镜像中自定义引擎的位置”即为此目录。

      此时的目录结构如下:

  9. 在当前目录执行镜像构建命令 “docker build --no-cache -f Dockerfile -t [镜像名称:版本名称] .”

    示例:

    docker build --no-cache -f Dockerfile -t sonarqubecustom:v1 .

  10. 将制作好的镜像推送到华为云swr镜像仓库上并将镜像设置为公开。可以参考推送镜像到镜像仓库

导出SonarQube规则excel文件

  1. 首先创建一个 CodeArts Repo 代码仓用于存放构建镜像脚本,可以参考新建CodeArts Repo代码仓
  2. 在代码仓根目录中新建一个目录“.cloudbuild”,并在该目录下新建一个文件“build.yml”。
  3. 在代码仓根目录新建两个空文件,名称分别为:excute_py.sh、generate_excel.py。

    此时的目录结构如下图:

  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-步骤61.1.1-步骤7一致。
  6. 新建构建任务,参考1.1.1-步骤8
  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,如果用户修改过登录密码,请填写相应的密码)。

    配置完后如下图:

  10. 单击“保存并执行”。
  11. 获取导出的SonarQube规则excel文件,参考1.1.1-步骤12

相关文档