docker - 使用 keycloak 作为 gitlab-ci 服务
问题描述
我正在尝试在 gitlab-ci 中运行我的集成测试,而不是通过服务启动的 keycloak 实例。gitlab-ci yaml 配置可以在这里找到:https ://gitlab.com/viae-modules/viae-modules/-/blob/master/.gitlab-ci.yml
services:
- docker:dind
- name: mongo:latest
alias: mongodb
- name: jboss/keycloak:10.0.1
alias: sso
command: ["-b", "0.0.0.0"]
现在我无法连接到这个实例。我添加了一些 curl 命令来验证连接,但我看到一些奇怪的事情发生了:
去http://sso:8080给出以下(keycloak)响应
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="refresh" content="0; url=/auth/" />
<meta name="robots" content="noindex, nofollow">
<script type="text/javascript">
window.location.href = "/auth/"
</script>
</head>
<body>
If you are not redirected automatically, follow this <a href='/auth'>link</a>.
</body>
</html>
这意味着 keycloak 已启动并正在运行。然后,连接到http://sso:8080/auth会给出 404...
我预计这是由于未绑定到 0.0.0.0,但我在服务配置中执行了此操作。
我认为这与 gitlab 配置/运行器有关,因为以下图像在 dockerized 环境中响应(即与基础图像的 docker 选项/配置无关):
FROM jboss/keycloak:10.0.1
EXPOSE 8080
COPY themes /opt/jboss/keycloak/themes
#Database
ENV DB_VENDOR=xxx
ENV DB_DATABASE=xxx
ENV DB_ADDR=xxx
ENV DB_PORT=xxx
#Admin user
ENV KEYCLOAK_USER=xxx
ENV KEYCLOAK_PASSWORD=xxx
有人知道我做错了什么吗?
解决方案
我无法解决此问题,但我能够找到解决方法:
我创建了一个包含 GraalVM 和独立 keycloak 服务器的基本映像: https ://gitlab.com/viae-modules/viae-modules/-/blob/master/modules/docker-base-images/graalvm-keycloak-dockerfile
FROM centos:7
RUN mkdir /home/viae
RUN mkdir /home/viae/keycloak
WORKDIR /home/viae
COPY config/start_keycloak.sh /home/viae/start_keycloak.sh
RUN yum install -y wget zip unzip git
RUN wget -q https://downloads.jboss.org/keycloak/10.0.1/keycloak-10.0.1.zip
RUN unzip -q keycloak-10.0.1.zip
RUN mv /home/viae/keycloak-10.0.1/* /home/viae/keycloak
RUN wget -q https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.1.0/graalvm-ce-java11-linux-amd64-20.1.0.tar.gz
RUN tar -zxf graalvm-ce-java11-linux-amd64-20.1.0.tar.gz
ENV PATH="/home/viae/graalvm-ce-java11-20.1.0/bin:${PATH}"
ENV JAVA_HOME="/home/viae/graalvm-ce-java11-20.1.0"
RUN /home/viae/keycloak/bin/add-user-keycloak.sh -r master -u admin -p admin
然后我可以在我的 CI 脚本中使用这个嵌入式 keycloak: https ://gitlab.com/viae-modules/viae-modules/-/blob/master/.gitlab-ci.yml (注意:keycloak 仍然应该从在脚本中 ==> 提供一些时间让 keycloak 有时间启动。
image: docker:stable
before_script:
- export GRADLE_USER_HOME=`pwd`/.gradle
- chmod a+rx `pwd`/gradlew
services:
- docker:dind
- name: mongo:latest
alias: mongodb
...
.java-base-config:
image: registry.gitlab.com/viae-modules/viae-modules/viae-graalvm-keycloak/viae-graalvm-keycloak:0.0.2
...
.execute-tests-template:
extends: .java-base-config
...
test-viae-oauth2.0-validator:
extends: .execute-tests-template
stage: test
script:
- date
- /home/viae/keycloak/bin/standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0 &
- sleep 30
- date
- curl http://localhost:8080
- curl http://localhost:8080/auth
- curl http://localhost:8080/auth/realms/master
- curl http://localhost:8080/auth/realms/master/protocol/openid-connect/certs
- MICRONAUT_ENVIRONMENTS=ci ./gradlew --no-daemon :modules:viae-oauth2.0-validator:jacocoTestReport -Pmicronaut.environments=ci
推荐阅读
- java - Kotlin 编译器如何在文件中查找对象
- azure - Azure CosmosDB 与存储的端到端加密
- office365 - Outlook:桌面客户端中未调用函数文件函数
- python - JSON 无法加载到变量中
- swift - 在 Swift 中的条件下删除集合的最后一个元素
- python - ValueError:无法为具有形状“(?,5)”的张量“Placeholder_21:0”提供形状(0、0)的值
- sql-server - 根据条件在SQL中放置where子句条件?
- c# - 从 Axios 请求返回 ASP.NET Core API 中的下载文件
- python - 在 Python 中使用有限线程进行异步、多线程抓取
- batch-file - bat读取文本获取变量