docker-compose运行jenkins集成sonarqube代码质量检测

  • 192.168.0.141 jenkins

  • 192.168.0.142 sonarqube

本实例用到2台机器,一台机器里面跑着jenkins服务,一台机器为sonarqube服务

jenkins服务部署这里就不做多的讲解,可以采用docker-compose部署,也可以单独部署,博主采用docker-compose部署的jenkins,我们在另外一台机器部署一个sonarqube服务,这里我们用mysql5.6的镜像和sonarqube的最新版的镜像镜像compose编排部署。

这里编排的是3个服务在一起了,有需要可以自行进行拆分

请参考博主开源项目:https://github.com/lizibin/docker-jenkins-sonarqube

1、拉取博主的项目,即可成功运行jenkins和sonarqube的代码质量检测

我们可以访问主机ip+9000端口访问到页面

未分类

2、这里我们还需要再jenkins进行配置一下插件,才可以自动分析代码质量

未分类

找到这个插件安装好这个插件就开始配置

3、配置jenkins 进入系统配置

未分类

继续配置Global Tool Configuration

未分类

然后我们就可以建立一个自由风格的项目来分析代码了

4、创建项目,需要勾上

未分类

未分类

修改Analysis properties

未分类

就可以开始构建了

5、构建完毕我们可以去9000端口查看页面详情

未分类

使用 Docker 搭建 Gitlab + Jenkins + SonarQube 的 PHP 持续集成环境

对于开源 PHP 项目,现在比较成熟的一套持续集成方案是使用 Github + TravisCI + StyleCI + Scrutinizer + coveralls,不过这套方案如果想要用于私有项目的话就抓狂了,个个要买套餐,其中很多还不便宜。而且对于公司内使用的项目来说,内部搭建的 Gitlab 方案更为常见,对于这种情况,我们可以使用 Gitlab + Jenkins + SonarQube 来进行代替。

安装 SonarQube

$ docker pull postgres

$ docker run --name db -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d postgres

$ docker pull sonarqube

$ docker run --name sq --link db -e SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar -p 9000:9000 -d sonarqube

执行完毕上面的命令后通过浏览器进入 SonarQube,默认用户名和密码都是 admin,进去后会有一段引导,里面会让你生成一个 access token,这个后面的配置 Jenkins 时会用到。

如果没有记下来的话,可以点右上角的用户头像里面的 My Account > Security 标签中可以生成一个新的。

配置 Jenkins

Jenkins 需要在全局的 系统设置 里面添加 SonarQube Server,填下对应的访问地址和上一步获取的 access token 即可。服务器地址填写 localhost 可能会有问题,填 ip 会比较好些。

然后需要在 系统管理 的 Global Tool Configuration 菜单中配置 SonarQube Scanner 安装,这个直接选择自动安装就好了,十分方便。

这两步配好之后就到对应的项目配置中添加构建步骤,下拉选择 Execute SonarQube Scanner,然后对于 2.1 版本以上的 SonarQube Scanner 就只需要配置 Analysis properties 这一项就可以了,比较常用的参数包括 sonar.projectKey (用来确定 该项目在 SonarQube 中叫什么名字) 和 sonar.sources=(用来指定需要扫描的目录)。

配完之后选择构建即可,可以去当前构建的 Console Output 里面查看有没有报错,正常执行完成的话,在 SonarQube 项目面板中就可以看到一个新增的命名为配置的 sonar.projectKey 的 项目了。

注意点

  • SonarPHP 自定义检查规则需要用 java 来写扩展,比较新的版本内置了 psr2 的规则基本够用,内置的 Quality Profiles 是可以复制一个出来进行自定义的
  • Sonar 嗅探出的一些问题可能实际上并没有什么影响,比如变量名中含有 ‘pwd’ 等,如果原本使用方式确实合理则可适当忽略