一、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服务。

sonar jenkins 配置 jenkins集成sonarqube_sonarqube


2、sonarqube创建访问令牌

sonarqube中生成用户的访问令牌,代替用户名和密码,避免密码在网络中传输。

sonar jenkins 配置 jenkins集成sonarqube_jenkins_02


sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_03


点击生成后会出现一个token,要复制下来,只会显示一次。

3、jenkins系统设置

sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_04


sonar jenkins 配置 jenkins集成sonarqube_docker_05


点击添加,选择下拉框中的Jenkins,进入到jenkins的凭证创建

sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_06


4、全局工具配置

sonar jenkins 配置 jenkins集成sonarqube_jenkins_07


该工具就是用来扫描代码的。

5、sonarqube中创建项目

sonar jenkins 配置 jenkins集成sonarqube_sonarqube_08

sonar jenkins 配置 jenkins集成sonarqube_运维_09


项目标识就写解决方案名称。

sonar jenkins 配置 jenkins集成sonarqube_docker_10


还写解决方案名称,点击创建。

sonar jenkins 配置 jenkins集成sonarqube_运维_11


到此,项目创建成功,再点击继续是告诉你不同语言的执行命令,不用管,直接退出该界面就可以。6、sonarqube权限的设置。

sonar jenkins 配置 jenkins集成sonarqube_docker_12


sonar jenkins 配置 jenkins集成sonarqube_sonarqube_13


7、 sonarqube给用户分配执行分析等权限。

sonar jenkins 配置 jenkins集成sonarqube_docker_14


sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_15

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文件放到解决方案的根目录下

sonar jenkins 配置 jenkins集成sonarqube_运维_16

在jienkins中构建环境,勾选上图项,token就是之前添加的凭证。

sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_17


在构建中,添加execute sonarqube scanner ,因为已经添加了sonar-project.properties文件,所以在这里只要选择jdk就可以,分析项目不用写。然后点击构建,结果如下:

sonar jenkins 配置 jenkins集成sonarqube_docker_18


onar-project.properties文件也可以不用写,直接把sonar-project.properties里面的内容放到构建中的execute sonarqube scanner里面的分析项目里边,同样可以执行成功。

三、解决不能扫描cs文件问题

用以上方式的sonarqube扫描 c#项目 会略过.cs文件,无法扫描出c#的问题

sonar jenkins 配置 jenkins集成sonarqube_sonarqube_19


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

sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_20


添加以上环境变量,重启容器。

3、分析代码

第一步:sonarqube中创建项目

sonar jenkins 配置 jenkins集成sonarqube_运维_21

sonar jenkins 配置 jenkins集成sonarqube_运维_22


sonar jenkins 配置 jenkins集成sonarqube_docker_23


sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_24


将这个访问token 保存下来。

第二步:在jenkins中创建项目

sonar jenkins 配置 jenkins集成sonarqube_sonar jenkins 配置_25


配置拉取源码地址

sonar jenkins 配置 jenkins集成sonarqube_运维_26


配置构建中的执行shell, 把分析的命令写上。

--------开始扫描,
/k 后面是项目名称,跟sonarqube中的项目名,
host.url 是sonarqube的访问地址
login 是在建项目的时候产生的访问token。
dotnet build ****.API.csproj
要编译的csproj文件的具体路径。
该项目有多个文件夹,可以写多个一起分析。
dotnet-sonarscanner end /d:sonar.login=“0c1a9ad983f40b6c2942290dab86917b7b924c8c”
这个就是分析结束,并上传报告。

构建成功后,在看sonarqube中的结果。

sonar jenkins 配置 jenkins集成sonarqube_sonarqube_27


已经扫描了C#的文件