在spring-boot:build-image中使用私有buildpack注册表的正确方法是什么?



我创建了我自己的paketo构建包,我试图使用它与spring-boot-maven-plugin。

我写的

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<buildpacks>
<buildpack>paketo-buildpacks/java</buildpack>
<buildpack>gitlab.company.com:5000/my-buildpack</buildpack>
</buildpacks>
</image>
</configuration>
</plugin>

如果我使用这个配置,spring正在下载docker。Io/paketobuildpacks/builder:base等都很好,但当然它不能从私有注册表下载构建包。如前所述,我必须为私有注册表添加凭据。

但是当我加上

<configuration>
<docker>
<builderRegistry>
<url>gitlab.company.com:5000</url>
<username>myuser</username>
<password>mypassword</password>
</builderRegistry>
</docker>
...
<configuration>

我突然得到这个错误

[INFO]  > Pulling builder image 'docker.io/paketobuildpacks/builder:base' 100%
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  33.957 s
[INFO] Finished at: 2022-06-23T14:39:27+02:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.6.8:build-image (default-cli) on project usermanagement: Execution default-cli of goal org.springframework.boot:spring-boot-maven-plugin:2.6.8:build-image failed:
Docker API call to 'localhost/v1.24/images/create?fromImage=docker.io%2Fpaketobuildpacks%2Fbuilder%3Abase' failed with status code 500 "Internal Server Error" 
and message "Head "https://registry-1.docker.io/v2/paketobuildpacks/builder/manifests/base": unauthorized: please use personal access token to login" -> [Help 1]

似乎maven插件正试图将我的私有注册表凭据应用到docker。io。

这是插件中的错误,还是不可能混合多个私有和公共docker注册表用于构建包?

目前,如果您提供凭据,那么插件期望从相同的注册表中拉出您的构建器和buildpack映像,即您在<url>块中指示的映像。

<configuration>
<docker>
<builderRegistry>
<url>gitlab.company.com:5000</url>
<username>myuser</username>
<password>mypassword</password>
</builderRegistry>
</docker>
...
<configuration>

失败的原因是你有一个混合,你在Paketo公共注册表中有构建器,在私有注册表中有自定义构建包。

你可以用几种方法来解决这个问题:

  1. 您可以将公共构建器重新定位到您的私有注册表中。然后从注册表中提取。如果您这样做,您将希望有某种自动作业,当通过Paketo公共注册中心发布新的构建器时,获取并重新定位构建器,这样您就可以获得更新。

  2. 您可以创建自己的构建器并将其发布到您的私有注册表。这需要更多的工作,但最终需要一个自定义builder.toml并使用该配置运行pack builder create。好处是,您可以简化构建器并删除不使用的内容,从而减少构建器的大小并使构建速度更快。请参阅此处的说明和Paketo基础构建器。toml文件。同样,您希望自动执行此操作,以便在构建包更新时生成新的构建器。

  3. 您可以使用pack命令行代替。您可以运行pack build来生成图像。pack命令行能够从多个注册表中提取。

为了将来的参考,你也可以跟踪这个问题,这是一个关于Spring Boot插件的主题和潜在变化的讨论。

相关内容

最新更新