一、sonarqube安装
docker方式安装sonarqube
docker 方式安装是最简便的,我选择了这个安装方式
1、下载镜像
docker pull postgres:latest
docker pull sonarqube
2、 创建挂载目录
#用于postgres的挂载目录
mkdir -p /opt/postgres/postgresql
mkdir -p /opt/postgres/data
mkdir -p /opt/sonarqube/logs
mkdir -p /opt/sonarqube/conf
mkdir -p /opt/sonarqube/data
mkdir -p /opt/sonarqube/extensions
3、运行容器
docker run --name postgres -d -p 5432:5432 --net sonarqube \
-v /opt/postgres/postgresql:/var/lib/postgresql \
-v /opt/postgres/data:/var/lib/postgresql/data \
-v /etc/localtime:/etc/localtime:ro \
-e POSTGRES_USER=sonar \
-e POSTGRES_PASSWORD=sonar \
-e POSTGRES_DB=sonar \
-e TZ=Asia/Shanghai \
--restart always \
--privileged=true \
--network-alias postgres \
postgres:latest
docker run -d --name sonarqube -p 9090:9000 \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONARQUBE_DATABASE_USER=sonar \
-e SONARQUBE_DATABASE_NAME=sonar \
-e SONARQUBE_DATABASE_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://postgres:5432/sonar" \
--net sonarqube \
--privileged=true \
--restart always \
-v /opt/sonarqube/logs:/opt/sonarqube/logs \
-v /opt/sonarqube/conf:/opt/sonarqube/conf \
-v /opt/sonarqube/data:/opt/sonarqube/data \
-v /opt/sonarqube/extensions:/opt/sonarqube/extensions\
sonarqube
4、通过ip 端口访问:http://ip:9090
二、jenkins集成sonarqube
1、jenkins下载插件:
进入插件管理,搜索sonar,选择SonarQube Scanner for Jenkins安装,安装好后重启jenkins服务。
2、sonarqube创建访问令牌
sonarqube中生成用户的访问令牌,代替用户名和密码,避免密码在网络中传输。
点击生成后会出现一个token,要复制下来,只会显示一次。
3、jenkins系统设置
点击添加,选择下拉框中的Jenkins,进入到jenkins的凭证创建
4、全局工具配置
该工具就是用来扫描代码的。
5、sonarqube中创建项目
项目标识就写解决方案名称。
还写解决方案名称,点击创建。
到此,项目创建成功,再点击继续是告诉你不同语言的执行命令,不用管,直接退出该界面就可以。
6、sonarqube权限的设置。
7、 sonarqube给用户分配执行分析等权限。
8、jenkins中创建项目
jenkins中创建一个项目,配置好git。
配置sonar-project.properties文件
内容如下:
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://192.214.3.22:9090
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.sources=.
sonar.exclusions=**/src/**,**/Views/**,**/wwwroot/**,/**static/**,/**build/**
sonar.projectKey=MOM.SCHEDULE
dotnet sonarscanner begin /k:"testproject" /n:"testproject" /v:1.1
dotnet build
dotnet sonarscanner end
sonar.host.url:是sonarqube的访问地址
sonar.sourceEncoding:使用的编码格式
sonar.sources:需要扫描的代码源目录,写.就是当前项目的根目录
sonar.exclusions:指定不要扫描的文件夹,多个用逗号隔开
sonar.projectKey:项目key ,就是sonarqube创建项目的名称
dotnet sonarscanner begin /k:“testproject” /n:“testproject” /v:1.1
/k 和/n 后面都是sonarqube创建项目的名称; /v 是版本号,随意写
dotnet build:编译项目
将sonar-project.properties文件放到解决方案的根目录下
在jienkins中构建环境,勾选上图项,token就是之前添加的凭证。
在构建中,添加execute sonarqube scanner ,因为已经添加了sonar-project.properties文件,所以在这里只要选择jdk就可以,分析项目不用写。
然后点击构建,结果如下:
onar-project.properties文件也可以不用写,直接把sonar-project.properties里面的内容放到构建中的execute sonarqube scanner里面的分析项目里边,同样可以执行成功。
三、解决不能扫描cs文件问题
用以上方式的sonarqube扫描 c#项目 会略过.cs文件,无法扫描出c#的问题
sonar7 以后版本,默认的 sonar-scanner 加 sonar-project.properties 配置文件,扫描c#的项目会出现,扫描不报错,但是显示结果为空.
jenkins 在linux 环境中要想扫描 c#项目必须使用 dotnet-sonarscanner 扫描
解决过程
1、首先我的jenkins是已经安装了dotnet sdk的。
2、安装 dotnet scanner #
进入jenkins容器:
执行 dotnet tool install --global dotnet-sonarscanner
就成功安装好 Sonar Scanner 了。
添加环境变量:
vim /etc/profile
添加以上环境变量,重启容器。
3、分析代码
第一步:sonarqube中创建项目
将这个访问token 保存下来。
第二步:在jenkins中创建项目
配置拉取源码地址
配置构建中的执行shell, 把分析的命令写上。
--------开始扫描,
/k 后面是项目名称,跟sonarqube中的项目名,
host.url 是sonarqube的访问地址
login 是在建项目的时候产生的访问token。
dotnet build ****.API.csproj
要编译的csproj文件的具体路径。
该项目有多个文件夹,可以写多个一起分析。
dotnet-sonarscanner end /d:sonar.login=“0c1a9ad983f40b6c2942290dab86917b7b924c8c”
这个就是分析结束,并上传报告。
构建成功后,在看sonarqube中的结果。
已经扫描了C#的文件