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


点击Clients—>Create client


点击Credentials,复制Client secret备用

修改Valid redirect URIs为Gerrit地址:http://10.0.0.10:8200/*

修改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
创建用户必须要有邮箱,否则会报错,并设置密码。

设置密码

然后登录gerrit进行测试

不使用--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容器内。