# 记一次sonar与gitlab集成的坑

SonarSonarQube)是一个开源平台,用于管理源代码的质量。Sonar不只是一个质量数据报告工具,更是代码质量管理平台。常见的语言都支持。

公司最近要做代码静态漏洞分析,调研了几款产品(cobrafortify源伞科技等)后,选择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,但不用也可以。

范围勾选apiread_user这两个。点提交后,可以看到以下页面:

app

上面的应用程序ID和密码,就要复制在下一步的sonar配置页面。

# sonar页面找到gitlab

在顶部菜单栏,找到Administration,打开左侧第一个Configuration,再ALM Integrations,可以看到githubgitlab集成。

我们在gitlab页面,主要做以下几项:

  • 勾选Enabled
  • 输入GitLab URL
  • 填入上一步的Application IDSecret
  • 勾选Allow users to sign-up
  • 勾选Synchronize user groups

我主要就被坑在GitLab URL这一步了,我是本地启动了一个gitlab服务,方便测试,先是没有启用httpssonar使用用户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

# 登陆

回到登陆页,就可以看到以下页面,点击跳转登陆就可以了: login