使用postgres数据库的傻瓜式搭建,并针对Mac M1芯片可能遇到的问题。面向突然需要通过SonarQube检查的前端工程师,后端可以直接使用SonarLint在编写代码时进行检查。vscode上并没有特别好的相关插件(eslint一把梭了)
准备工作:
- 我们将要用到docker。你可能需要一个docker desktop,如果你熟悉docker的命令行操作,则可以忽略。
- 我们将要用到homebrew。你永远可以相信tuna的文档:homebrew的安装和换源:tuna官方文档。而使用m1芯片mac的用户,请不要错过少数派的这篇文章在 M1 芯片 Mac 上使用 Homebrew。
本文参考博客园:Docker下,搭建SonarQube环境,在macOS 12.3.1下搭建,
1 Docker
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低 (是的,可以通过docker在mac上玩游戏)。
docker的三个基本概念:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
如果此前没有安装过docker,直接通过官网下载docker app即可,它会同时帮你自动下载并配置到docker的命令行工具。
2 安装并运行数据库
网上教程也有使用MySQL等数据库的,此处按照本文所参考的教程,使用postgreSQL数据库:世界上最先进的开源关系型数据库
拉取postgres镜像。进入终端,输入命令:
1
docker pull postgres
运行镜像容器
1
docker run --name db -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres
--name
: 容器名称,此处取名为db-e
:使用值docker将名称为POSTGRES_PASSWORD
,POSTGRES_USER
的环境变量暴露给容器。POSTGRES_PASSWORD
为PostgreSQL的超级用户密码POSTGRES_USER
设置超级用户名。如果未提供,则超级用户名默认为postgres。POSTGRES_DB
设置要设置的默认数据库的名称。如果未提供,则默认为POSTGRES_USER的值。此处设置的为:数据库名为sonar,超级用户名为sonar,密码为sonar.
-d
: 后台运行容器,并返回容器ID完成后,docker desktop的containers下出现名为db的容器,且正在运行。
3 安装并运行SonarQube
下载并安装SonarQube镜像,我们有以下途径
SonarQube官网下载,导入docker;
直接docker拉取
docker pull sonarqube
但是因为我们使用m1芯片为arm64架构,这两种方法下载并运行的镜像可能会遇到问题,因此,我们换用以下解决方案:
拉取SonarQube源码,自行编译为镜像并使用
1
2
3
4
5# download 下载,也可通过官网下载
git clone https://github.com/SonarSource/docker-sonarqube
cd docker-sonarqube/9/community
#build
docker build -t sonarqube-arm .直接docker拉取社区已编译好的arm-sonarqube
- 使用
docker search sonarqube-arm
搜索别人上传的arm-sonarqube - 挑选一个并拉取,我使用的是
docker pull koolwithk/sonarqube-arm
- 使用
启动sonar,并连接到数据库
1
docker run --name sonar --link db -e SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -p 9000:9000 -d sonarqube
--name
:容器名称,此处取名为sonar--link 容器名称
:与其它容器通信,此处为与名为db的容器,即postgres的数据库-e
:环境变量添加了SONARQUBE_JDBC_URL环境变量为 jdbc:postgresql://容器名称:端口/数据库名称 (数据库连接驱动)
添加了SONARQUBE_JDBC_USERNAME环境变量为sonar(数据库连接用户名)
添加了SONARQUBE_JDBC_PASSWORD环境变量为sonar(数据库连接密码)
-p
: 指定端口映射,格式为:主机(宿主)端口:容器端口-d
:镜像名称,此处我们需要把sonarqube替换为我们所拉取的arm-sonarqube
对应的名称或IMAGE ID。使用docker image ls
命令可以查看到。
在docker desktop中查看
在浏览器中,访问http://localhost:9000,默认用户名admin,密码admin(对于SonarQube9)
新建项目,根据需要选择云端导入或manually手动(本地项目选择手动)。
输入项目名和项目钥,随意。
输入你自己的token并生成,点击继续后输入项目的信息,sonar将返回给你一串sonar-scanner命令。复制。
4 安装sonar-scanner并运行扫描
通过brew install sonar-scanner即可
进入我们本地需要sonar扫描的项目文件夹,在终端输入步骤3中所复制的命令,等待片刻。即可在http://localhost:9000的项目中查看到自己项目的扫描结果。sonar提示的bug一般是是eslint忽略的js文件中,耐心,我们将会解决得很快。祝好运!