Gerrit集成Keycloak

发布于 2023年12月20日

Keycloak版本:20.0.5
Gerrit版本:2.16.28
Gerrit-oauth plugin版本:2.16.1
新版本的Keycloak默认请求地址是不带/auth的,启动的时候需要加上 --http-relative-path /auth
如果不加,会导致gerrit插件登录失败,报错: Page not found,只能更改插件,将路径中的auth去掉。

加上--http-relative-path /auth的启动方式:
运行命令:

Keycloak:
docker run -d -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin keycloak/keycloak:20.0.5 "start-dev --http-relative-path /auth"
Gerrit:
docker run -d --name gerrit --hostname 10.0.0.10:8200 -p 8200:8080 -p 29418:29418 -e CANONICAL_WEB_URL=http://10.0.0.10:8200 gerrit/gerrit:2.16.28

如果Gerrit使用https
那么CANONICAL_WEB_URL需要改为https://gerrit域名,不然对接keycloak会出错。

Keycloak创建realm
图片1.png
图片2.png
点击Clients—>Create client
图片3.png
图片4.png
点击Credentials,复制Client secret备用
图片5.png
修改Valid redirect URIs为Gerrit地址:http://10.0.0.10:8200/*
图片6.png
修改gerrit配置文件

gerrit.config
[auth]
        type = OAUTH
        gitBasicAuthPolicy = HTTP
[plugin "gerrit-oauth-provider-keycloak-oauth"]
        client-id = gerrit
        root-url = http://10.0.0.10:8080/
        realm = soimt
        client-secret = nL4dhA8d7WLsu3JpYiXFHA0JkRkCZLQ7

保存重启gerrit

创建用户必须要有邮箱,否则会报错,并设置密码。
图片7.png
设置密码
图片8.png
然后登录gerrit进行测试
图片9.png
不使用--http-relative-path /auth的启动方式:
Keycloak

docker run -d -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin
keycloak/keycloak:20.0.5 start-dev

其他方式一样,唯一不一样的就是将gerrit oauth插件进行修改
去掉gerrit oauth插件auth路径:
下载bazel编译环境

docker pull gcr.io/bazel-public/bazel:latest
docker run -dit --name bazel --interactive --entrypoint=/bin/bash gcr.io/bazel-public/bazel:latest
进入容器内部进行clone gerrit oauth插件
git clone https://gerrit.googlesource.com/plugins/oauth
切换分支到符合gerrit版本的,否则版本不兼容
git branch -a
git checkout remotes/origin/stable-2.16
修改KeycloakApi.java文件,将其中的auth路径去掉
vim src/main/java/com/googlesource/gerrit/plugins/oauth/KeycloakApi.java
在oauth目录中进行编译
命令:bazel build oauth
编译完成会在bazel-bin路径下出现oauth.jar文件
然后将其放置在gerrit plugins下,文件权限要注意,之后重启gerrit

注意:
如果是自签名证书。
需要在容器/etc/hosts添加keycloak的解析,并且需要将keycloak的证书导入到jfrog容器内。