Spring Boot Maven 插件 > 2.4.x 在 gitlab 注册表上构建映像发布
Posted
技术标签:
【中文标题】Spring Boot Maven 插件 > 2.4.x 在 gitlab 注册表上构建映像发布【英文标题】:Spring Boot Maven Plugin > 2.4.x build image publish on GitLab registry 【发布时间】:2021-04-21 20:20:25 【问题描述】:我目前正在开发一个 GitLab CI/CD 管道,它可以编译、测试和构建标准的 Spring Boot 应用程序。 我想将它打包到一个 docker 映像中并将其发布到 GitLab 注册表以供以后使用。 Spring Boot 最近将 build-image 目标添加到其 maven 插件中,该插件还能够将图像发布到注册表。 我的问题是,我无法让身份验证工作。 我正在使用 maven:3.6.3-jdk-11-slim 图像来完成 docker:dind 服务的工作,以访问 docker 守护进程。 构建图像运行良好,但发布失败。 我将项目 pom 中的 maven 插件配置为使用属性进行身份验证,这将被我的 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>
我在 Pipeline/Job 中的 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
如果您需要更多信息,请告诉我。 我感谢任何类型的方向和想法。
【问题讨论】:
【参考方案1】:我知道这已经有一段时间了,但以防其他人试图完成这个
这很好用
<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 Maven 插件 > 2.4.x 在 gitlab 注册表上构建映像发布的主要内容,如果未能解决你的问题,请参考以下文章
使用 maven 插件设置时 Spring Boot 配置文件不活动
spring-boot-maven插件repackage(goal)的那些事
Spring boot Flyway Jooq Code gen maven 插件顺序