sonarQube 整合Gitlab 的 SSO 插件单点登录

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

获取插件

方式一

如果你的 sonarQube 所在服务器可以联网,直接使用管理员账号登录 sonarqube,在线安装插件。

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

方式二

或者可以去下载 jar 包。
在 sonarQube 的插件页面找到 Gitlab Auth 插件,下载 Version 1.3.2

Marketplace

虽然网页上写的是支持版本到 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 即可。

创建好的应用
如果你的 Gitlab 版本比较新,页面可能是下面这样子:
Gitlab 配置

配置 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,两边保持一致即可。
在这里插入图片描述

如果需要同步 Gitlab 与 sonarQube 的 group,需要将 scope 调整为 api.
同步组

Server base URL

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

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

验证效果

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

登录
点击登录,会出现提示是否授权,授权以后就可以登录了。

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

问题汇总

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

The redirect URI included is not valid.

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

http://gitlab.yourdomain.com/oauth/authorize?
client_id=6aa41a2an412dada52fca7cdd50c00a5678ec0fc42678407ac3824bb3152f6d
&redirect_uri=http%3A%2F%2Fsonar.yourdomain.com%2F
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 的日志信息中找到蛛丝马迹,千万不要忽略日志里的重要报错信息。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cj96248

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值