Add support for caching to bind mounts when building images
When building an image using the Maven `spring-boot:build-image` goal or the Gradle `bootBuildImage` task, the build and launch caches can be configured to use a bind mount as an alternative to using a named volume. Closes gh-28387
This commit is contained in:
@@ -339,6 +339,14 @@ class PackagingDocumentationTests {
|
||||
.containsPattern("launchCache=cache-gradle-[\\d]+.launch");
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void bootBuildImageWithBindCaches() {
|
||||
BuildResult result = this.gradleBuild.script("src/docs/gradle/packaging/boot-build-image-bind-caches")
|
||||
.build("bootBuildImageCaches");
|
||||
assertThat(result.getOutput()).containsPattern("buildCache=/tmp/cache-gradle-[\\d]+.build")
|
||||
.containsPattern("launchCache=/tmp/cache-gradle-[\\d]+.launch");
|
||||
}
|
||||
|
||||
protected void jarFile(File file) throws IOException {
|
||||
try (JarOutputStream jar = new JarOutputStream(new FileOutputStream(file))) {
|
||||
jar.putNextEntry(new ZipEntry("META-INF/MANIFEST.MF"));
|
||||
|
||||
@@ -50,6 +50,7 @@ import org.springframework.boot.gradle.junit.GradleCompatibility;
|
||||
import org.springframework.boot.testsupport.gradle.testkit.GradleBuild;
|
||||
import org.springframework.boot.testsupport.junit.DisabledOnOs;
|
||||
import org.springframework.boot.testsupport.testcontainers.DisabledIfDockerUnavailable;
|
||||
import org.springframework.util.FileSystemUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
@@ -297,6 +298,26 @@ class BootBuildImageIntegrationTests {
|
||||
deleteVolumes("cache-" + projectName + ".build", "cache-" + projectName + ".launch");
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void buildsImageWithBindCaches() throws IOException {
|
||||
writeMainClass();
|
||||
writeLongNameResource();
|
||||
BuildResult result = this.gradleBuild.build("bootBuildImage");
|
||||
String projectName = this.gradleBuild.getProjectDir().getName();
|
||||
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
||||
assertThat(result.getOutput()).contains("docker.io/library/" + projectName);
|
||||
assertThat(result.getOutput()).contains("---> Test Info buildpack building");
|
||||
assertThat(result.getOutput()).contains("---> Test Info buildpack done");
|
||||
removeImages(projectName);
|
||||
String tempDir = System.getProperty("java.io.tmpdir");
|
||||
Path buildCachePath = Paths.get(tempDir, "junit-image-cache-" + projectName + "-build");
|
||||
Path launchCachePath = Paths.get(tempDir, "junit-image-cache-" + projectName + "-launch");
|
||||
assertThat(buildCachePath).exists().isDirectory();
|
||||
assertThat(launchCachePath).exists().isDirectory();
|
||||
FileSystemUtils.deleteRecursively(buildCachePath);
|
||||
FileSystemUtils.deleteRecursively(launchCachePath);
|
||||
}
|
||||
|
||||
@TestTemplate
|
||||
void buildsImageWithCreatedDate() throws IOException {
|
||||
writeMainClass();
|
||||
|
||||
Reference in New Issue
Block a user