手工制作SonarQube工具镜像
制作SonarQube镜像
若需要使用SonarQube社区版本,可以在如下官方链接中获取:SonarQube Server、SonarScanner CLI。
- 登录一台安装有docker命令的linux机器,在任意目录下创建一个空目录,此处以 “sonarqubecustom” 为例。
- 在“sonarqubecustom”目录下执行命令 “mkdir sonarqube_webservice2504” 和 “mkdir sonarqube”,创建两个目录(目录名称任意)分别用于存放“SonarQube Server”和“SonarScanner CLI”,如下:

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

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

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

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

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

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

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

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

- 在“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编译环境。
注意:
- 命令中加粗部分一定不能修改,其他部分都可以自定义,只要达到目的即可。
- “SonarQube Server”所在目录在镜像中的名称必须是“sonarqube_webservice”。
- “SonarScanner CLI”所在目录在镜像中的名称必须是“sonarqube”。
- SonarQube运行所需的jdk和Node.js环境所在目录在镜像中的名称必须是“jdk”和“nodejs”。
- “/usr/local/tools”该目录支持用户自定义,但需保持一致。配置代码检查任务的“镜像中自定义引擎的位置”即为此目录。
此时的目录结构如下:

- 命令中加粗部分一定不能修改,其他部分都可以自定义,只要达到目的即可。
- 在当前目录执行镜像构建命令 “docker build --no-cache -f Dockerfile -t [镜像名称:版本名称] .”
示例:
docker build --no-cache -f Dockerfile -t sonarqubecustom:v1 .
- 将制作好的镜像推送到华为云swr镜像仓库上并将镜像设置为公开。可以参考推送镜像到镜像仓库。
导出SonarQube规则excel文件
- 首先创建一个 CodeArts Repo 代码仓用于存放构建镜像脚本,可以参考新建CodeArts Repo代码仓。
- 在代码仓根目录中新建一个目录“.cloudbuild”,并在该目录下新建一个文件“build.yml”。
- 在代码仓根目录新建两个空文件,名称分别为:excute_py.sh、generate_excel.py。
此时的目录结构如下图:

- 将如下文本中的“[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/* - 分别填写“excute_py.sh”和“generate_excel.py”两个文件。其内容与1.1.1-步骤6和1.1.1-步骤7一致。
- 新建构建任务,参考1.1.1-步骤8。
- 单击“编辑”,选择“参数设置 > 自定义参数”。
- 单击“立即新建”,创建第一个参数。
- 单击“新建参数”,需要新建如下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,如果用户修改过登录密码,请填写相应的密码)。
配置完后如下图:

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