目标是要在目标服务器上使用docker工具部署好sonar环境,然后再集成到Jenkins中实现自动化的代码审查工作。
Docker
首先Dokcer的源大部分现在都用不了,于是我上网查询,终于找到了一个可用的镜像。
编辑/etc/docker/daemon.json
文件,在里面添加下面的内容:
{
"registry-mirrors" :
[
"https://docker.m.daocloud.io",
"https://noohub.ru",
"https://huecker.io",
"https://dockerhub.timeweb.cloud"
]
}
然后重启一下docker服务就可以使用正常使用docker了。
sonar
使用docker部署sonar环境特别简单,只需要两行代码,但是在没有考虑好sonar版本和java版本的对应情况下,我第一遍部署的环境无法使用,因为目前最新的sonar版本要求java17以上,而我的jenkins里面配置的两个java,一个是1.8,一个是11版本,所以我需要降低sonar版本,读者可以根据自己需要去进行选择下载对应版本的sonar或者java。同时sonar7.9以上就不再支持mysql了。
docker pull sonarqube:7.8-community
docker run -itd --name sonarqube:7.8-community -p 9000:9000 sonarqube:7.8-community
执行上面两行代码。即可成功安装sonarqube,在浏览器中输入ip加端口9000即可进入。默认初始用户名密码是admin和admin。
后来又发现sonarqube:7.8-community在使用的过程中太老了,于是我又升级了一下jenkins中的java版本,额外在system选项中配置了一个jdk17版本的java,使我能够使用最新版本的sonarqube了。
下面是我的修改过程。
#进入jenkins部署的所在的服务器,查看jenkins容器的id
docker ps
#使用上一个命令查找到的容器id,进入容器内
docker exec -it mycontainer-id /bin/bash
#下载好wget工具用来下载jdk17的压缩包,
#下载好tar工具用来解压
apt-get install wget tar
#创建一个空的文件夹用来存储jdk-17
mkdir /opt/jdk-17
#进入该文件夹并使用wget下载jdk17的安装包
cd /etc/jdk-17
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz -O /tmp/jdk-17.tar.gz
#使用tar对下载的压缩包解压操作
tar -xzf /tmp/jdk-17.tar.gz -C /opt/jdk-17 --strip-components=1
这之后进入jenkins,进入tools中
在jdk一栏中,将新配置好的jdk17填写上去。
Jenkins集成
1.下载插件
首先要在Jenkins的插件管理中下载使用sonar时对应的插件sonarqube scanner。
2.配置服务端
然后需要在系统配置中配置好sonarqube的服务端,填写好目标路径,就是IP地址:9000端口的那个路径。
在这里,还需要配置一下凭证,打开sonar网页端.
点击右上角的my account
在security一栏中,创建一个token
然后把创建出来的token复制一下,粘贴到Jenkins中下面的创建凭证中。注意,类型选择secret text。
3.最后,在全局工具管理中,再配置一下sonarqube scanner
这样就可以在工程中使用sonar了。
4.创建一个jenkins项目,在增添构建步骤一栏选择下面的。
结合下面的这段代码即可。
sonar.projectName=${JOB_NAME} #项目在sonarqube上的显示名称
sonar.projectKey=${JOB_NAME} #项目的唯一标识,不能重复
sonar.sources=. #扫描哪个项目的源码