使用 Cloud Native Build Packs/Paketo.io 和 spring-boot-maven-plugin 为 GitHub Container Registry link 配置自定义容器镜像 LABEL
Configure custom container image LABEL using Cloud Native Build Packs/Paketo.io with spring-boot-maven-plugin for GitHub Container Registry link
我使用 https://start.spring.io/ 创建了一个简单的 Spring 启动应用程序。现在我想使用 Paketo.io / Cloud Native Build Pack 对 spring-boot-maven-plugin
的支持来构建容器映像并使用 GitHub 操作将其推送到 GitHub Container Registry。
我的 pom.xml
看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.jonashackt</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>helloworld</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>15</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我在 GitHub 操作工作流程中使用 mvn spring-boot:build-image
命令成功地创建了一个 Docker 图像。我也成功了pushed it to the GitHub Container Registry (following this guide)。这是我的 build.yml
工作流程:
name: publish
on: [push]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 15
uses: actions/setup-java@v1
with:
java-version: 15
- name: Build the hello-world Docker image
run: |
echo 'Login to GitHub Container Registry'
echo $CR_PAT | docker login ghcr.io -u jonashackt --password-stdin
echo 'Build a container image from our Spring Boot app using Paketo.io / Cloud Native Build Packs'
mvn spring-boot:build-image --batch-mode --no-transfer-progress
echo 'tag Paketo build image to have the right GitHub Container Registry coordinates'
docker tag helloworld:0.0.1-SNAPSHOT ghcr.io/jonashackt/helloworld:latest
docker push ghcr.io/jonashackt/helloworld:latest
env:
CR_PAT: ${{ secrets.CR_PAT }}
但 Container Registry 映像未链接到 GitHub 存储库。由于这必须在 Dockerfile
:
中使用特定的 OCI 兼容 LABEL
来完成
LABEL org.opencontainers.image.source="https://github.com/jonashackt/helloworld"
如何将 Cloud Native Build Packs/Paketo 与 spring-boot-maven-plugin
一起配置此 LABEL
?
由于 spring-boot-maven-plugin
透明包装 Paketo.io / Cloud Native Build Packs,最好的方法是从 https://paketo.io/docs. There's a section on how to apply custom labels to application images:
开始
Paketo users may add labels to the application image using the Image
Labels Buildpack.
由于 org.opencontainers.image.source
是 OCI 特定的标签,因此 the Image Labels Buildpack will set the correct label for us. All we have to do, is to pass an environment variable to the Paketo build that we prefix with BP_OCI_
. Have a look at the possible OCI specific labels in the docs。例如,如果我们 运行 以下 Paketo 构建:
pack build spring-boot-buildpack
--path . \
--builder paketobuildpacks/builder:base \
--env "BP_OCI_DESCRIPTION=Demo Application"
生成的应用程序图像将有一个 LABEL
定义值 org.opencontainers.image.description Demo Application
。所以为了设置 org.opencontainers.image.source
我们需要为我们的 Paketo 构建定义环境变量 BP_OCI_SOURCE
!
但是当我们在这里使用 spring-boot-maven-plugin
时,我们需要以某种方式在我们的 pom.xml
中配置这个环境变量,因为我们不直接与 Paketo CLI 交互。 the documentation 告诉我们可以在 configuration
标签内使用 image.env
标签来定义
Environment variables that should be passed to the builder.
为了将特定于 OCI 的 LABEL org.opencontainers.image.source https://github.com/yourGitHubUserOrOrgaName/yourRepositoryName
配置到 Paketo 使用 spring-boot-maven-plugin 构建的应用程序映像,请将以下标签添加到您的 pom.xml
(这里还有a fully comprehensible example project including a pom.xml):
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BP_OCI_SOURCE>https://github.com/yourGitHubUserOrOrgaName/yourRepositoryName</BP_OCI_SOURCE>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
现在您的图像已链接到您的 GitHub 存储库。如果您查看帐户的包并单击构建映像,您应该会看到所有 README.md
信息映射如下:
我使用 https://start.spring.io/ 创建了一个简单的 Spring 启动应用程序。现在我想使用 Paketo.io / Cloud Native Build Pack 对 spring-boot-maven-plugin
的支持来构建容器映像并使用 GitHub 操作将其推送到 GitHub Container Registry。
我的 pom.xml
看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.jonashackt</groupId>
<artifactId>helloworld</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>helloworld</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>15</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我在 GitHub 操作工作流程中使用 mvn spring-boot:build-image
命令成功地创建了一个 Docker 图像。我也成功了pushed it to the GitHub Container Registry (following this guide)。这是我的 build.yml
工作流程:
name: publish
on: [push]
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 15
uses: actions/setup-java@v1
with:
java-version: 15
- name: Build the hello-world Docker image
run: |
echo 'Login to GitHub Container Registry'
echo $CR_PAT | docker login ghcr.io -u jonashackt --password-stdin
echo 'Build a container image from our Spring Boot app using Paketo.io / Cloud Native Build Packs'
mvn spring-boot:build-image --batch-mode --no-transfer-progress
echo 'tag Paketo build image to have the right GitHub Container Registry coordinates'
docker tag helloworld:0.0.1-SNAPSHOT ghcr.io/jonashackt/helloworld:latest
docker push ghcr.io/jonashackt/helloworld:latest
env:
CR_PAT: ${{ secrets.CR_PAT }}
但 Container Registry 映像未链接到 GitHub 存储库。由于这必须在 Dockerfile
:
LABEL
来完成
LABEL org.opencontainers.image.source="https://github.com/jonashackt/helloworld"
如何将 Cloud Native Build Packs/Paketo 与 spring-boot-maven-plugin
一起配置此 LABEL
?
由于 spring-boot-maven-plugin
透明包装 Paketo.io / Cloud Native Build Packs,最好的方法是从 https://paketo.io/docs. There's a section on how to apply custom labels to application images:
Paketo users may add labels to the application image using the Image Labels Buildpack.
由于 org.opencontainers.image.source
是 OCI 特定的标签,因此 the Image Labels Buildpack will set the correct label for us. All we have to do, is to pass an environment variable to the Paketo build that we prefix with BP_OCI_
. Have a look at the possible OCI specific labels in the docs。例如,如果我们 运行 以下 Paketo 构建:
pack build spring-boot-buildpack
--path . \
--builder paketobuildpacks/builder:base \
--env "BP_OCI_DESCRIPTION=Demo Application"
生成的应用程序图像将有一个 LABEL
定义值 org.opencontainers.image.description Demo Application
。所以为了设置 org.opencontainers.image.source
我们需要为我们的 Paketo 构建定义环境变量 BP_OCI_SOURCE
!
但是当我们在这里使用 spring-boot-maven-plugin
时,我们需要以某种方式在我们的 pom.xml
中配置这个环境变量,因为我们不直接与 Paketo CLI 交互。 the documentation 告诉我们可以在 configuration
标签内使用 image.env
标签来定义
Environment variables that should be passed to the builder.
为了将特定于 OCI 的 LABEL org.opencontainers.image.source https://github.com/yourGitHubUserOrOrgaName/yourRepositoryName
配置到 Paketo 使用 spring-boot-maven-plugin 构建的应用程序映像,请将以下标签添加到您的 pom.xml
(这里还有a fully comprehensible example project including a pom.xml):
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<BP_OCI_SOURCE>https://github.com/yourGitHubUserOrOrgaName/yourRepositoryName</BP_OCI_SOURCE>
</env>
</image>
</configuration>
</plugin>
</plugins>
</build>
现在您的图像已链接到您的 GitHub 存储库。如果您查看帐户的包并单击构建映像,您应该会看到所有 README.md
信息映射如下: