gitlab - 无法推送到 Gitlab 注册表 | Quarkus - 吊臂构建
问题描述
我目前正在开发 Quarkus 应用程序,因此需要一个 CI 管道 + 容器注册表。
由于通过 docker 的容器化不起作用(docker daemon - 特权模式),我想使用 Quarkus 已经支持的 Jib。
管道中的命令:
- mvn clean package
-Dquarkus.container-image.push=true
-Dquarkus.container-image.registry="https://$registry"
-Dquarkus.container-image.username=$username
-Dquarkus.container-image.password=$deployToken
-Dquarkus.container-image.name=(group)/(project)
- 用户名 = 部署令牌用户名
- 密码 = 部署令牌
部署令牌具有所有权限,因此这不应该是问题。
我还尝试了在注册表 url 中添加令牌的命令的不同变体:
- https://username:token@registry.gitlab.com(group)/(project)
- https://name:token@registry.gitlab.com(group)/(project)
但在那些没有这些参数的情况下很明显:
- Dquarkus.container-image.username=$用户名
- Dquarkus.container-image.password=$deployToken
但我每次都得到同样的回应:
Failed to execute goal io.quarkus:quarkus-maven-plugin:1.7.2.Final:build (default) on project (project):
Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
[ERROR] [error]: Build step io.quarkus.container.image.jib.deployment.JibProcessor#buildFromJar threw an exception: java.lang.IllegalArgumentException:
The supplied container-image registry 'https://registry.gitlab.com/(group)/(project)' is invalid
我真的希望有人有一个想法,这里出了什么问题。
在另一个项目中,我还使用 Jib 将 Spring Boot 应用程序容器化并将其推送到 Google Container Registry,当我提前使用 Google SDK 时,它可以工作。
- gcloud auth activate-service-account (account-name) --key-file=$gsdk_token
- gcloud auth configure-docker
Gitlab Registry 可能有类似的方法吗?
解决方案
此代码基于此检查引发错误。“注册表”字符串应采用以下形式,例如,
some.registry.host.example.com[:optional_port]
因此,在您的情况下,它应该是
-Dquarkus.container-image.registry=registry.gitlab.com
而且我还注意到 Quarkus 曾经对图像引用强制执行了一种非常严格的格式(我不知道现在已经解决了);您需要查阅Quarkus 插件文档以了解如何正确格式化最终图像参考。
另请参阅这些其他 Quarkus 问题:
Jib 用户的奖励:
Quarkus 内部利用Jib Core 库(与支持 Jib Maven/Gradle 构建插件相同的库)来构建容器映像,这非常棒。但对于那些感兴趣的人,Jib 构建插件也有 Jib Quarkus 扩展(Maven / Gradle),可以直接容器化 Quarkus 应用程序。