# 记一次sonar与gitlab集成的坑
Sonar(SonarQube)是一个开源平台,用于管理源代码的质量。Sonar不只是一个质量数据报告工具,更是代码质量管理平台。常见的语言都支持。
公司最近要做代码静态漏洞分析,调研了几款产品(cobra、fortify、源伞科技等)后,选择SonarQube暂时先用起来。后期可以考虑付费版本。
用docker安装了SonarQube (opens new window)的最新版本(8.6.0),挺方便:
docker pull sonarqube
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube
本地用http://localhost:9000就可以看到操作界面,用户名和密码初始都是admin。
集成gitlab时遇到一些坑,在此记录一下。
# gitlab申请令牌
可以在设置-应用中操作,也可以在管理中心-应用中操作,效果是一样的。
具体步骤也可以看官网 (opens new window)。
新建一个应用,写入名称,随便写,一般是SonarQube,地址http://192.168.21.176:9000/oauth2/callback/gitlab,前面ip和端口部分,写你的sonar服务器的地址。最好用https,但不用也可以。
范围勾选api和read_user这两个。点提交后,可以看到以下页面:

上面的应用程序ID和密码,就要复制在下一步的sonar配置页面。
# sonar页面找到gitlab
在顶部菜单栏,找到Administration,打开左侧第一个Configuration,再ALM Integrations,可以看到github和gitlab集成。
我们在gitlab页面,主要做以下几项:
- 勾选
Enabled - 输入
GitLab URL - 填入上一步的
Application ID和Secret - 勾选
Allow users to sign-up - 勾选
Synchronize user groups
我主要就被坑在GitLab URL这一步了,我是本地启动了一个gitlab服务,方便测试,先是没有启用https,sonar使用用户gitlab,报没有权限。
接着启用了https,但证书不对,又在网上找了个程序,生成一个本地测试的证书,仍是没有权限。
到sonar的日志文件里看错误信息:
web[AXbXAPJgc5Bvl4oAAAGv][o.s.s.a.AuthenticationError] Fail to callback authentication with 'gitlab'
java.lang.IllegalStateException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
网上查,说还是证书问题,我进sonar容器内部,把证书导入,还是不行。
最后让同事看了下,他在公网环境搭建的没有问题,让我申请个正式的证书试试。于是,我又申请了个免费的证书,给了gitlab后,就可以了。
所以,这里GitLab URL一定要用https,而且证书一定要正式才行。
# 配置Server base URL
还是刚才的Configuration菜单下,找到General,再找到Server base URL,输入你的sonar服务器地址,我的是:http://192.168.21.176:9000。
如果没有这一步,默认会是http://localhost:9000。
# 登陆
回到登陆页,就可以看到以下页面,点击跳转登陆就可以了: