在编译阶段创建jib容器镜像,并在部署阶段推送相同的镜像

问题描述 投票:0回答:1

我正在使用 maven Jib 插件构建容器映像,并且构建得很好。我也可以将其推送到存储库。但我在弄清楚如何在编译阶段构建映像,然后在部署阶段将其推送到存储库而无需再次构建时遇到了问题。 我是否需要重写插件配置两次,jib 就会缓存图像,这样就不会再次构建它?或者 github 上是否缺少一些文档。

我尝试构建图像并在一个阶段中推动它。 我需要在一个阶段中构建它,然后将该图像推入不同的阶段

maven-plugin jib maven-jib
1个回答
0
投票

您需要在

package
deploy
阶段使用一次执行来构建和推送镜像。我什至不知道这两个操作是否可以分为两次执行,因为 Jib 不能那样工作。

这是我的示例配置:

<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
    <version>3.4.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>${jib-maven-plugin.goal}</goal>
            </goals>
            <configuration>
                <from>
                    <!--
                      Use the tagged version of JDK to ensure consistent build.
                      The image must have the target architecture (configuration.from.platforms.platform.architecture) among the manifest list.
                      See: https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#how-do-i-specify-a-platform-in-the-manifest-list-or-oci-index-of-a-base-image
                    -->
                    <image>openjdk:17.0.1-jdk-slim@sha256:9a37f2c649301b955c2fd31fb180070404689cacba0f77404dd20afb1d7b8d84</image>
                    <platforms>
                        <platform>
                            <architecture>amd64</architecture>
                            <os>linux</os>
                        </platform>
                    </platforms>
                </from>
                <to>
                    <image>${jib-maven-plugin.to.image}</image>
                    <!--
                      The credentials are required to connect to a remote Docker repository.
                      Environment variables like `PATH` and `M2_HOME` are referenced using the env.* prefix, so define only
                      See: https://stackoverflow.com/a/10463133/3764965
                      See: https://books.sonatype.com/mvnref-book/reference/resource-filtering-sect-properties.html
                    -->
                    <auth>
                        <username>${env.HARBOR_USERNAME}</username>
                        <password>${env.HARBOR_PASSWORD}</password>
                    </auth>
                    <tags>
                        <tag>latest</tag>
                    </tags>
                </to>
                <container>
                    <creationTime>USE_CURRENT_TIMESTAMP</creationTime>
                    <mainClass>com.myapp.Application</mainClass>
                    <user>nobody</user>
                    <workingDirectory>/app/resources</workingDirectory>
                </container>
            </configuration>
        </execution>
    </executions>
</plugin>

需要修改。请参阅 Jib Maven 插件文档了解更多详细信息:https://github.com/GoogleContainerTools/jib/tree/master/jib-maven-plugin

变量:

  • jib-maven-plugin.goal
    • 本地主机 Docker 存储库:使用
      dockerBuild
      进行构建并将其推送到本地 Docker 守护进程中。
    • 远程 Docker 存储库:使用
      build
      目标进行无 docker 构建并推送到远程 Docker 存储库。
  • jib-maven-plugin.to.image
    • 本地主机 Docker 存储库:仅使用应用程序的名称,例如
      myapp
    • 远程 Docker 仓库:使用包含域名的完整路径来表示远程 Docker 仓库中的镜像地址,例如
      imagine.mycompany.com/mydepartment/myproject/myapp

这里有一些提示:

  • 使用 JDK 的标记版本来实现一致的构建。
  • 使用环境变量中的凭据部署到 Docker Harbor 或任何映像工件。
© www.soinside.com 2019 - 2024. All rights reserved.