spring-boot - Spring Boot Maven 插件 > 2.4.x 构建镜像在 GitLab 注册表上发布

标签 spring-boot docker maven gitlab gitlab-ci

我目前正在开发一个 GitLab CI/CD 管道,它可以编译、测试和构建一个标准的 Spring Boot 应用程序。

我想将它打包到一个 docker 镜像中,并将其发布到 GitLab 注册表以供日后使用。

Spring Boot 最近将 build-image 目标添加到它的 maven 插件中,该插件还具有将图像发布到注册表的能力。

我的问题是,我无法让授权工作。

我正在使用 maven:3.6.3-jdk-11-slim 图像与 docker:dind 服务一起访问 docker 守护进程. 构建图像运行良好,但发布失败。 我在项目 pom 中配置了 maven 插件以使用 auth 属性,这将被我的 CI/CD 作业中的 CLI 覆盖,如下所示:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <docker>
            <publishRegistry>
                <username>${CI_REGISTRY_USER}</username>
                <password>${CI_REGISTRY_PASSWORD}</password>
                <url>${CI_REGISTRY}</url>
            </publishRegistry>
        </docker>
    </configuration>
</plugin>

POM 中定义的没有值的属性(将由 CLI 调用填充):

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>11</java.version>
    <CI_REGISTRY/>
    <CI_REGISTRY_USER/>
    <CI_REGISTRY_PASSWORD/>
</properties>

我在管道/作业中的 Maven CLI 调用使用 GitLab 注册表变量:

docker image job:
  stage: Build
  image: maven:3.6.3-jdk-11-slim
  services:
    - docker:dind
  script:
    - echo "java.runtime.version=11" > system.properties
    - mvn spring-boot:build-image -DCI_REGISTRY=$CI_REGISTRY -DCI_REGISTRY_USER=$CI_REGISTRY_USER -DCI_REGISTRY_PASSWORD=$CI_REGISTRY_PASSWORD -Dspring-boot.build-image.imageName=SpringBootImage_${CI_JOB_ID} -Dspring-boot.build-image.publish=true

我按照 GitLab 和 Spring Boot 文档中的说明进行操作,但似乎无法确定我的问题。

GitLab Registry Auth documentation Spring Boot Maven Plugin image publishing documentation

最佳答案

我知道这已经有一段时间了,但万一其他人正在尝试完成此任务

这很好用

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>                   
    <mainClass>com.foo.Main</mainClass>
  </configuration>
  <executions>
    <execution>
      <goals>
        <goal>build-image</goal>
      </goals>
      <phase>deploy</phase>
      <configuration>
        <image>
          <name>${env.CI_REGISTRY_IMAGE}/${project.artifactId}:${project.version} </name>
          <publish>true</publish>
        </image>
        <docker>
          <publishRegistry>
             <username>${env.CI_REGISTRY_USER}</username>
             <password>${env.CI_REGISTRY_PASSWORD}</password>
          </publishRegistry>
        </docker>
      </configuration>
    </execution>
  </executions>
</plugin>

它使用 gitlab-ci 内置的环境变量来配置一切

关于spring-boot - Spring Boot Maven 插件 > 2.4.x 构建镜像在 GitLab 注册表上发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65759219/

相关文章:

java - 在服务方法上使用@Transactional,更新多个存储库

java - 如何在初始握手时从 Spring Websocket 检索 session ID 并在以后使用?

google-chrome - Golang Selenium 包 - 连接到 selenium 服务器和 headless chrome

python - 如何解决pg_cron 引起的安全问题?

docker - Acumatica - 在一台计算机上安装多个版本

java - maven从错误的位置获取依赖项

maven - 使用 Maven 和模块缓慢构建 Appengine

spring-boot - 如何为 Spring Boot 应用程序生成 csr

java - Spring中的多种实现

java - 无法查看导入 jar 的源代码