Linux下Docker安装SonarQube(PostgreSQL)


SonarQube是一种自动代码审查工具,用于检测代码中的错误、漏洞和代码异味。 它可以与现有的工作流程集成,以支持跨项目分支和拉取请求的持续代码检查。

本文基于_Linux_操作系统,在_Docker_容器中部署_SonarQube_服务,并进行简单的配置和使用。_SonarQube_在7.8版本之后不再支持_Mysql_数据库,教程选用的是最新版本的Postgresql数据库,_SonarQube_使用的版本是_8.8-community_。

1.安装Postgresql

1.1 下载 PostgreSQL镜像
docker pull postgres
1.2 启动容器
docker run -d -p 5432:5432 -v /data/postgres:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -e ALLOW_IP_RANGE=0.0.0.0/0 --name postgres postgres

参数说明:

POSTGRES_PASSWORD 是数据库初始密码

ALLOW_IP_RANGE=0.0.0.0/0 允许任何主机访问

1.3 进入postgres容器
docker exec -it postgres bash

注意: 这里的postgres1.2--name的参数

1.4 使用默认用户postgres创建SonarQube数据库
# 切换postgres用户
su postgres
# 进入数据库
psql
# 创建sonar数据库
CREATE DATABASE sonar;
# 退出数据库
\q
# 退出postgres用户
exit
# 退出容器
exit

2. 部署SonarQube

2.1 下载SonarQube镜像
docker pull sonarqube:8.8-community
2.2 创建Volume(可忽略此步骤)
docker volume create --name sonarqube_data
docker volume create --name sonarqube_logs
docker volume create --name sonarqube_extensions
docker volume create --name sonarqube_conf
2.3 启动容器
docker run -d --name sonarqube \
    -p 9000:9000 \
    -e SONAR_JDBC_URL=jdbc:postgresql://192.168.14.5:5432/sonar \
    -e SONAR_JDBC_USERNAME=postgres \
    -e SONAR_JDBC_PASSWORD=123456 \
    -v sonarqube_data:/opt/sonarqube/data \
    -v sonarqube_extensions:/opt/sonarqube/extensions \
    -v sonarqube_logs:/opt/sonarqube/logs \
    -v sonarqube_conf:/opt/sonarqube/conf \
    sonarqube:8.8-community

docker logs \-f sonarqube 查看日志发现报错

错误日志

修改配置

vim /etc/sysctl.conf

最后一行添加vm.max_map_count=262144,保存退出
加载使其生效

sysctl -p

重新启动容器

docker start sonarqube

浏览器访问http://主机IP:9000,使用默认账号(admin)密码(admin)登录,根据提示修改原始密码

3.配置SonalQube

3.1 生成密钥

_Administration > Security > Users_,选择用户_Tokens_一栏,根据提示在_Generate Tokens_输入框中输入Token名称,点击_Generate_生成Token,点击_Copy_复制保存。

找到Token生成
生成Token

**注意**:这里的复制_Token_界面一旦关闭,无法再次查看_Token_内容,请妥善保存

3.2 用户Token

_Token_可以调用_SonarQube_相关API,以进行调试及开发。

3.2.1 代码调试(以GO为例)
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"strings"
)

var createPro = "http://192.168.14.5:9000/api/projects/create"

func main() {
	v := url.Values{}
	v.Add("name", "test")
	v.Add("project", "test")
	v.Add("visibility", "public")
	fmt.Println(v.Encode())
	req, err := http.NewRequest("POST", createPro, strings.NewReader(v.Encode()))
	if err != nil {
		fmt.Println(err)
		return
	}
	// 这里的username可直接使用生成的Token,无需密码;或直接用账号密码进行验证
	req.SetBasicAuth("3cf069236f72e95a64aad2b5714fb717ca080249", "")
	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(resp.StatusCode)
	data, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()
	fmt.Println(string(data))
}
3.2.2 Postman调试
  1. 填写请求路径

  2. 点击_Authorization_,Type选择_Basic Auth_,在_username_中填写刚才生成的_Token_Authorization

  3. 点击_Body_,选择_x-www-form-urlencoded_,填写所需_Key-Value_参数

  4. 发送请求
    发送请求

3.2 汉化(可选)

Administration > Marketplace > Plugins,搜索_Chinese_,选择对应插件安装,稍等片刻即可安装成功,页面上方会出现_重启服务_和_重置_选择按钮,按需选择就行了,个人觉得英文界面好用一些
汉化

4.SonarQube的使用

4.1 安装SonarScanner(其他安装方式请参照官方文档)
4.1.1 下载二进制安装包
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip
4.1.2 解压
unzip sonar-scanner-cli-4.6.2.2472-linux.zip -d /usr/local/
4.1.3 添加到PATH(建立软连接)
ln -s /usr/local/sonar-scanner-4.6.2.2472-linux/bin/sonar-scanner /usr/bin/

ln -s /usr/local/sonar-scanner-4.6.2.2472-linux/bin/sonar-scanner-debug /usr/bin/

测试安装是否成功

sonar-scanner -h

输出如下信息,证明安装无误

INFO: 
INFO: usage: sonar-scanner [options]
INFO: 
INFO: Options:
INFO:  -D,--define <arg>     Define property
INFO:  -h,--help             Display help information
INFO:  -v,--version          Display version information
INFO:  -X,--debug            Produce execution debug output
4.2 生成扫描代码
4.2.1 创建项目
  1. 登录_SonarQube_服务界面,点击_Create new project > Manually_或右上角_Add project > Manually_

  2. 输入合法的_Project key_和_Display name_,点击_Set up_create project

  3. 填写一个_Token_名称生成新的_Token_,或使用上面生成的_Token_,点击_Continue_继续下一步填写Token

  4. 选择合适选项,生成如下扫描代码(因为之前已经安装好_SonarScanner_,故忽略_Download_步骤)

生成扫描代码

sonar-scanner \
  -Dsonar.projectKey=test \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://192.168.14.5:9000 \
  -Dsonar.login=3cf069236f72e95a64aad2b5714fb717ca080249

如果你想获取更详细的_Debug_信息,可在命令后面添加以下任一参数

-X,--verbose, -Dsonar.verbose=true

更多参数请参照官方文档

参数解析:

-Dsonar.projectKey 项目名称,扫描完毕后会将数据发送给对应的项目

-Dsonar.sources 代码目录,默认值是`.`,表示当前目录,故该命令应在代码根目录下执行

-Dsonar.host.url 服务器地址

-Dsonar.login 登录Token
4.3 执行扫描

点击_Copy_复制扫描代码,在已安装_SonarScanner_的服务上的代码根目录执行
出现如下日志说明扫描完毕,此时可刷新管理界面或直接访问日志中的_http://192.168.14.5:9000/dashboard\?id=test_ 查看扫描结果

INFO: Analysis report generated in 114ms, dir size=156 KB
INFO: Analysis report compressed in 299ms, zip size=81 KB
INFO: Analysis report uploaded in 174ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://192.168.14.5:9000/dashboard?id=test
INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report
INFO: More about the report processing at http://192.168.14.5:9000/api/ce/task?id=AXplL1OzMN_oVHnT4W6t
INFO: Analysis total time: 8.154 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 13.451s
INFO: Final Memory: 13M/47M
INFO: ------------------------------------------------------------------------

本文是根据学习笔记整理而成,如有错误或不当之处,望各位读者海涵,同时欢迎各位留言或Email批评指正,不胜感激。


文章作者: Jack Li
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Li !
评论
  目录