在 Jenkins
中使用 sonar-scanner
进行质量分析是非常便捷的。但是从docker hub 拉取的镜像中,并没有安装 sonar-scanner
。
之前写过在 Jenkins 中安装 nodejs 和sonar-scanner,但是后来发现,当开发语言过多以后,在对其使用sonar-scanner 扫描时,需要安装对应语言的 编译环境,这样会导致Jenkins 镜像的体积会越来越大,并且没有重新build Jenkins镜像会很麻烦。所以采用将 sonar-scanner 采用卷挂载的方式使用,并在宿主机上拉起对应语言的编译镜像的容器,在这个容器内执行 sonar-scanner 命令。
下载sonar-scanner
修改 docker-compose.yml文件
version: '2'
services:
jenkins:
image: 10.34.28.103:32005/library/jenkins:2.164.3.2
ports:
- "32002:8080"
dns: 8.8.8.8
environment:
- JENKINS_MODE=master
- TZ=Asia/Shanghai
- JENKINS_ADMIN_ID=root
- JENKINS_ADMIN_PW=abcd1234
- JAVA_OPTS=-Djenkins.install.runSetupWizard=false
volumes:
- /home/local/jenkins/jenkins/:/data/jenkins
- /home/local/dp20/sonar-scanner/:/data/sonar-scanner
restart: "no"
启动Jenkins
执行命令
docker-compose -f docker-compose.yml -p demo up -d
进入到Jenkins 容器中
执行命令
docker exec -it 8eeb011adfa0 bash
- 执行sonar-scanner命令
/data/sonar-scanner/bin/sonar-scanner -v
报错
- 解决报错
按照 Jenkins镜像中安装nodejs和sonar-scanner提到的,这里需要让sonar-scanner 使用系统的jre
所以需要执行命令:
sed -i 's/use_embedded_jre=true/use_embedded_jre=false/g' /data/sonar-scanner/bin/sonar-scanner
- 然后在执行
/data/sonar-scanner/bin/sonar-scanner -v
完美执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PazmWPYo-1604308297170)(evernotecid://621D2FF6-4E72-4E02-9043-55F31F42819B/appyinxiangcom/22553815/ENResource/p1219)]
- 使用 Jenkins pipeline 拉起一个对应语言的编译构建镜像的容器
整体思路
优点
- 减小Jenkins容器的体积
- 不用每遇到一个新的扫描语言都要重新
build
Jenkins 镜像 - 方便 sonar-scanner 工具升级