首页 > 解决方案 > 无法推送到 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 中添加令牌的命令的不同变体:

但在那些没有这些参数的情况下很明显:

但我每次都得到同样的回应:

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 可能有类似的方法吗?

标签: gitlabcontainersgitlab-ciquarkusjib

解决方案


此代码基于此检查引发错误。“注册表”字符串应采用以下形式,例如,

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 应用程序。


推荐阅读