Mat*_*zin 3 maven gitlab docker spring-boot 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 插件以使用身份验证属性,该属性将被我的 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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我在 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
Run Code Online (Sandbox Code Playgroud)
我按照 GitLab 和 Spring Boot 文档的说明进行操作,但似乎无法识别我的问题。
我知道已经有一段时间了,但以防万一其他人正在尝试实现这一目标
这个效果很好
<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>
Run Code Online (Sandbox Code Playgroud)
它使用 gitlab-ci 内置环境变量来配置所有内容
| 归档时间: |
|
| 查看次数: |
1194 次 |
| 最近记录: |