gitlab管理员帐户直接登陆sonarqube

前言 

sonarqube 支持多种认证登录方式,如果使用自带的账号体系,需要管理员一个个添加账号,使用起来多有不便。不过一般公司都部署了私有化的gitlab,我们可以利用私有的 gitlab 账号来登录 Sonarqube。

方式一

插件

 

没有安装 GitLab Auth 插件时,应用市场中会有个 安装 按钮,安装完成后变成了 卸载

方式二

或者可以去下载 jar 包。
在 sonarQube

虽然网页上写的是支持版本到 7.3,实际我用的 sonarQube 版本为 7.9.4,可以正常使用。

方式三

要是都不行,还可以直接去下载源码,编译。

Github 地址:sonar-auth-gitlab-plugin

下载插件然后通过maven打包然后放入到sonar的插件目录中(/home/sonar/sonarqube/extensions/plugins),重启sonarqube。注意,无论使用哪种方式安装插件,都需要重启sonarqube

 

Gitlab 配置

理论上来说,任意内部 Gitlab 注册用户都可以执行下面的操作,但是使用权限较低的用户在认证登录的时候,会出现警告。所以,建议使用 Gitlab的管理员账号进行下面的操作。

创建应用

不同的 Gitlab 版本看到的界面风格差异较大,但是都可以在设置 -> 应用 中找到添加新应用的选项。(英文界面 Settings -> Applications)

应用

这里的 名称 一般就填 SonarQube 好了,等下从 Sonarqube 跳转到 gitlab 页面上时,会显示这个名称,所以尽量取一个有意义的名字。

重定向URI 是最重要的参数,格式是固定的:

http://sonardomain.com/oauth2/callback/gitlab

其中 /oauth2/callback/gitlab 是固定字符串,http://sonardomain.com 是 SonarQube 部署的服务器域名。注意是域名,直接使用 ip 是不行的(来源于官方文档,没有测试是不是真的不可以)

scopes 选择 read_user 即可。
 

 创建好的应用

 

 

配置 sonarQube


需要配置很多项,任意一个没有正确设置,都可能导致不可预料的结果。

配置 gitlab 插件
使用管理员账号登录 sonarQube,在配置 -> 通用配置 选项卡下,找到 gitlab。

如果没有这个选项,那就是 sonar-auth-gitlab-plugin 插件没安装好,或者忘记重启 sonarQube 了。
 

Gitlab配置

 

这里有个 Authentication,下面有 3 个提示非常关键:

  • 需要使用 HTTPS
  • 设置 sonar.core.serverBaseURL
  • 设置 Gitlab 回调地址

 

第一项,这里明确提出 sonarQube 需要才用 HTTPS,真是这样吗,实际不是。我部署时并没有采用 HTTPS ,但是依然可以使用。因为开发服务基本都是内网,安全性问题没那么重要,没必要装证书。

第二个配置等下再说。

第三个实际在配置 Gitlab 的时候,已经设置好了。这就是为什么之前提到的回调链接格式必须固定,这里是理论依据。

开启认证登录
Enabled 开启后,一定要点保存。这个是总开关,开启以后,这个插件才启用,如果以后公司不让用 Gitlab 登录了,关闭这个就行了,其他的都可以不改。

Gitlab 地址
GitLab url 填私有的 Gitlab 地址,注意这个默认值,如果在日志里看到你请求的认证地址是 https://gitlab.com,就是这个选项没配对。
 

gitlab

 

Gitlab 认证

如果你还没有关闭 Gitlab 配置页面,直接把应用 ID密匙复制进去即可。

gitlab

 

密匙设置以后不可见,无法从sonarQube页面看到,点击修改也只能输入新的值。

Allow users to sign-up

是否允许用户注册,也就是说如果 sonarQube 里面没有这个用户,能不能允许这个用户登录。

注册

 如果不把这个选项打开,新用户不能通过 Gitlab 自动登录,还得预先设置用户。如果 sonarQube 是强控制的,那就不开这个选项。如果在公司内部使用,打开这个可以省掉维护用户体系。通过 Gitlab 登录的用户,在 sonarQube 里可以看到用户名和邮箱。

Admin

 

可以看到,普通用户显示较少的信息,通过 Gitlab登录的用户可以看到用户名,邮箱,Gitlab 标志。

Gitlab access scope
这个设置,默认为 read_user,其实在获取 Gitlab 秘钥的时候,有选项如何控制权限,当时选择的就是 read_user,两边保持一致即可。

在这里插入图片描述

 

同步组

 

Server base URL

这个配置非常重要,在 sonarQube 的 配置 -> 通用配置 -> 通用 选项卡下,有一项用于设置基本域名。

 

在这里插入图片描述

 这个选项默认为空,在 Gitlab 插件的最开始,有个 Authentication 提示,第二条就是说的这个参数。
sonar.core.serverBaseURL 参数值就是复制 sonarQube 浏览器中的域名地址了。

base URL

 

验证效果

退出已经登录的 sonarQube 账号,点击登录可以看到如下页面:

登录

 认证

 

看到图示中的蓝色字,就是在 Gitlab 配置时,设置的名称。

问题汇总
在集成过程中出现了不少问题,现在汇总如下:

The redirect URI included is not valid.
如果Gitlab 授权以后出现如下提示,可以先将浏览器中地址复制到记事本,看一下里面的各种链接是否正确。
 

 
  1.  
    http://gitlab.yourdomain.com/oauth/authorize?
  2.  
    client_id=6aa41a2an412dada52fca7cdd50c00a5678ec0fc42678407ac3824bb3152f6d
  3.  
    &redirect_uri=http%3A%2F%2Fsonar.yourdomain.com%2F
  4.  
    oauth2%2Fcallback%2Fgitlab&response_type=code&scope=read_user
 

最开始,我的 redirect_uri 里面是 localhost:9000 ,实际就是 sonar.core.serverBaseURL 没有配置。
还有要说的是,gitlab 获取秘钥和应用 ID 那里,填的是 sonarQube 的域名,当时 callback URI 填错了,一直报这个错,找了很久原因。

无权访问此页,请联系管理员
You’re not authorized to access this page. Please contact the administrator.
 

在这里插入图片描述

 

用来同步 Gitlab 和 sonarQube 的用户,但是我配置gitlab应用的 gitlab 账号级别太低,不能获取用户信息,导致每次登陆都报错——无权访问此页,请联系管理员。最后在 sonarQube 日志里发现了错误信息,使用 gitlab 管理员获取的秘钥和应用 ID。

是寻找答案的时候,我发现还有一种可能——sonarQube 没有配置 HTTPS。如果出现类似问题,可以尝试自签发一个证书解决。(我现在使用的 sonarQube 没有开启 HTTPS,没有出现此问题)

最后一个不是问题的问题
由于我使用的 sonarQube 版本是 7.9.x,如果你使用的 sonarQube 版本是 8.x 以上,可能会少许不同。因为 sonarQube 商业化进程中,将以前很多通过插件形式支持的功能都去掉了,移入了企业版中。

大部分情况下,可以在 sonarQube 的日志信息中找到蛛丝马迹,千万不要忽略日志里的重要报错信息。
 

 

我使用的是管理员帐户设置的集成,如果这里开启了同步groups过来的话,管理员登陆就会报权限不足
因为管理员登陆时组同步过来有权限问题,所以这里应该关闭掉

解决方案

sonarqube8.4
【通用】-【ALM集成】-【GitLab】
关闭开关,重启sonarqube即可