Use paketobuildpacks/builder-noble-java-tiny as the default image builder

Closes gh-42711
This commit is contained in:
Moritz Halbritter
2025-04-24 09:45:41 +02:00
parent 29e0865afd
commit 0fb369e8b8
78 changed files with 122 additions and 111 deletions

View File

@@ -161,8 +161,8 @@ class BootBuildImageIntegrationTests {
writeMainClass();
writeLongNameResource();
BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT",
"--imageName=example/test-image-cmd", "--builder=ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1",
"--trustBuilder", "--runImage=paketobuildpacks/run-jammy-tiny", "--createdDate=2020-07-01T12:34:56Z",
"--imageName=example/test-image-cmd", "--builder=ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2",
"--trustBuilder", "--runImage=paketobuildpacks/run-noble-tiny", "--createdDate=2020-07-01T12:34:56Z",
"--applicationDirectory=/application");
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
assertThat(result.getOutput()).contains("example/test-image-cmd");
@@ -412,9 +412,9 @@ class BootBuildImageIntegrationTests {
void buildsImageOnLinuxArmWithImagePlatformLinuxArm() throws IOException {
writeMainClass();
writeLongNameResource();
String builderImage = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1";
String runImage = "docker.io/paketobuildpacks/run-jammy-tiny:latest";
String buildpackImage = "ghcr.io/spring-io/spring-boot-test-info:0.0.1";
String builderImage = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2";
String runImage = "docker.io/paketobuildpacks/run-noble-tiny:latest";
String buildpackImage = "ghcr.io/spring-io/spring-boot-test-info:0.0.2";
removeImages(builderImage, runImage, buildpackImage);
BuildResult result = this.gradleBuild.build("bootBuildImage");
String projectName = this.gradleBuild.getProjectDir().getName();
@@ -440,9 +440,9 @@ class BootBuildImageIntegrationTests {
void failsWhenBuildingOnLinuxAmdWithImagePlatformLinuxArm() throws IOException {
writeMainClass();
writeLongNameResource();
String builderImage = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1";
String runImage = "docker.io/paketobuildpacks/run-jammy-tiny:latest";
String buildpackImage = "ghcr.io/spring-io/spring-boot-test-info:0.0.1";
String builderImage = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2";
String runImage = "docker.io/paketobuildpacks/run-noble-tiny:latest";
String buildpackImage = "ghcr.io/spring-io/spring-boot-test-info:0.0.2";
removeImages(builderImage, runImage, buildpackImage);
BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage");
String projectName = this.gradleBuild.getProjectDir().getName();

View File

@@ -4,8 +4,8 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
runImage = "paketobuildpacks/run-jammy-tiny"
buildpacks = ["ghcr.io/spring-io/spring-boot-test-info:0.0.1"]
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
runImage = "paketobuildpacks/run-noble-tiny"
buildpacks = ["ghcr.io/spring-io/spring-boot-test-info:0.0.2"]
imagePlatform = "linux/arm64"
}

View File

@@ -8,7 +8,7 @@ if (project.hasProperty('applyWarPlugin')) {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
applicationDirectory = "/application"
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
buildWorkspace {
bind {

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
bindings = [ "${projectDir}/bindings/ca-certificates:/platform/bindings/certificates" as String ]
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
buildpacks = [ "spring-boot/spring-boot-test-info" ]
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
buildpacks = [ "file://${projectDir}/buildpack/hello-world" as String ]
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
buildpacks = [ "file://${projectDir}/hello-world.tgz" as String ]
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
buildpacks = ["ghcr.io/spring-io/spring-boot-test-info:0.0.1"]
buildpacks = ["ghcr.io/spring-io/spring-boot-test-info:0.0.2"]
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
createdDate = "2020-07-01T12:34:56Z"
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
createdDate = "now"
}

View File

@@ -5,7 +5,7 @@ plugins {
bootBuildImage {
imageName = "example/test-image-custom"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
runImage = "paketobuildpacks/run-jammy-tiny"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
runImage = "paketobuildpacks/run-noble-tiny"
pullPolicy = "IF_NOT_PRESENT"
}

View File

@@ -5,6 +5,6 @@ plugins {
bootBuildImage {
imageName = "example/test-image-name"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
securityOptions = []
}

View File

@@ -8,6 +8,6 @@ bootJar {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
}

View File

@@ -8,7 +8,7 @@ if (project.hasProperty('applyWarPlugin')) {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
network = "none"
}

View File

@@ -10,6 +10,6 @@ if (project.hasProperty('applyWarPlugin')) {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = PullPolicy.ALWAYS
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
tags = [ "example.com/myapp:latest" ]
}

View File

@@ -8,7 +8,7 @@ if (project.hasProperty('applyWarPlugin')) {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
trustBuilder = true
pullPolicy = "IF_NOT_PRESENT"
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
buildWorkspace {
volume {

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
archiveFile = bootWar.archiveFile
}
}

View File

@@ -4,8 +4,8 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
runImage = "paketobuildpacks/run-jammy-tiny"
buildpacks = ["ghcr.io/spring-io/spring-boot-test-info:0.0.1"]
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
runImage = "paketobuildpacks/run-noble-tiny"
buildpacks = ["ghcr.io/spring-io/spring-boot-test-info:0.0.2"]
imagePlatform = "linux/arm64"
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
buildCache {
volume {
name = "build-cache-volume"

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
environment = ["FORCE_FAILURE": "true"]
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
buildpacks = [ "urn:cnb:builder:example/does-not-exist:0.0.1" ]
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
createdDate = "invalid date"
}

View File

@@ -4,7 +4,7 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
tags = [ "example/Invalid-Tag-Name" ]
}

View File

@@ -8,6 +8,6 @@ if (project.hasProperty('applyWarPlugin')) {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
pullPolicy = "IF_NOT_PRESENT"
}

View File

@@ -4,6 +4,6 @@ plugins {
}
bootBuildImage {
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.1"
builder = "ghcr.io/spring-io/spring-boot-cnb-test-builder:0.0.2"
publish = true
}

View File

@@ -119,12 +119,12 @@ The following table summarizes the available properties and their default values
| `builder`
| `--builder`
| Name of the builder image to use.
| `paketobuildpacks/builder-jammy-java-tiny:latest`
| `paketobuildpacks/builder-noble-java-tiny:latest`
| `trustBuilder`
| `--trustBuilder`
| Whether to treat the builder as {url-buildpacks-docs}/for-platform-operators/how-to/integrate-ci/pack/concepts/trusted_builders/#what-is-a-trusted-builder[trusted].
| `true` if the builder is one of `paketobuildpacks/builder-jammy-java-tiny`, `paketobuildpacks/builder-noble-java-tiny`, `paketobuildpacks/builder-jammy-tiny`, `paketobuildpacks/builder-jammy-base`, `paketobuildpacks/builder-jammy-full`, `paketobuildpacks/builder-jammy-buildpackless-tiny`, `paketobuildpacks/builder-jammy-buildpackless-base`, `paketobuildpacks/builder-jammy-buildpackless-full`, `gcr.io/buildpacks/builder`, `heroku/builder`; `false` otherwise.
| `true` if the builder is one of `paketobuildpacks/builder-noble-java-tiny`, `paketobuildpacks/builder-jammy-java-tiny`, `paketobuildpacks/builder-jammy-tiny`, `paketobuildpacks/builder-jammy-base`, `paketobuildpacks/builder-jammy-full`, `paketobuildpacks/builder-jammy-buildpackless-tiny`, `paketobuildpacks/builder-jammy-buildpackless-base`, `paketobuildpacks/builder-jammy-buildpackless-full`, `gcr.io/buildpacks/builder`, `heroku/builder`; `false` otherwise.
| `imagePlatform`
| `--imagePlatform`
@@ -251,8 +251,8 @@ NOTE: The plugin detects the target Java compatibility of the project using the
When using the default Paketo builder and buildpacks, the plugin instructs the buildpacks to install the same Java version.
You can override this behavior as shown in the xref:packaging-oci-image.adoc#build-image.examples.builder-configuration[builder configuration] examples.
NOTE: The default builder `paketobuildpacks/builder-jammy-java-tiny:latest` contains a reduced set of system libraries and does not include a shell.
Applications that require a shell to run a start script, as might be the case when the {url-gradle-docs-application-plugin}[`application` plugin] has been applied to generate a distribution zip archive, or that depend upon a system library that is not present, should override the `builder` configuration to use one that includes a shell and a broader set of system libraries, such as `paketobuildpacks/builder-jammy-base:latest` or `paketobuildpacks/builder-jammy-full:latest`.
NOTE: The default builder `paketobuildpacks/builder-noble-java-tiny:latest` contains a reduced set of system libraries and does not include a shell.
Applications that require a shell to run a start script, as might be the case when the {url-gradle-docs-application-plugin}[`application` plugin] has been applied to generate a distribution zip archive, or that depend upon a system library that is not present, should override the `runImage` configuration to use one that includes a shell and a broader set of system libraries, such as `paketobuildpacks/ubuntu-noble-run-base:latest`.

View File

@@ -174,7 +174,7 @@ class BootBuildImageTests {
@Test
void whenNoBuilderIsConfiguredThenRequestHasDefaultBuilder() {
BuildRequest request = this.buildImage.createRequest();
assertThat(request.getBuilder().getName()).isEqualTo("paketobuildpacks/builder-jammy-java-tiny");
assertThat(request.getBuilder().getName()).isEqualTo("paketobuildpacks/builder-noble-java-tiny");
assertThat(request.isTrustBuilder()).isTrue();
}