Avoid image pulls in integration tests
This commit sets the pull policy to `IF_NOT_PRESENT` where possible in integration tests for the Maven and Gradle plugins to reduce the number of times the default Paketo builder and run images are pulled from Docker Hub. Fixes gh-24113
This commit is contained in:
parent
21d97524d8
commit
59e0f7317e
|
@ -56,11 +56,10 @@ class BootBuildImageIntegrationTests {
|
||||||
void buildsImageWithDefaultBuilder() throws IOException {
|
void buildsImageWithDefaultBuilder() throws IOException {
|
||||||
writeMainClass();
|
writeMainClass();
|
||||||
writeLongNameResource();
|
writeLongNameResource();
|
||||||
BuildResult result = this.gradleBuild.build("bootBuildImage");
|
BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT");
|
||||||
String projectName = this.gradleBuild.getProjectDir().getName();
|
String projectName = this.gradleBuild.getProjectDir().getName();
|
||||||
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
||||||
assertThat(result.getOutput()).contains("docker.io/library/" + projectName);
|
assertThat(result.getOutput()).contains("docker.io/library/" + projectName);
|
||||||
assertThat(result.getOutput()).contains("paketobuildpacks/builder");
|
|
||||||
ImageReference imageReference = ImageReference.of(ImageName.of(projectName));
|
ImageReference imageReference = ImageReference.of(ImageName.of(projectName));
|
||||||
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
||||||
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
||||||
|
@ -74,10 +73,9 @@ class BootBuildImageIntegrationTests {
|
||||||
void buildsImageWithCustomName() throws IOException {
|
void buildsImageWithCustomName() throws IOException {
|
||||||
writeMainClass();
|
writeMainClass();
|
||||||
writeLongNameResource();
|
writeLongNameResource();
|
||||||
BuildResult result = this.gradleBuild.build("bootBuildImage");
|
BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT");
|
||||||
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
||||||
assertThat(result.getOutput()).contains("example/test-image-name");
|
assertThat(result.getOutput()).contains("example/test-image-name");
|
||||||
assertThat(result.getOutput()).contains("paketobuildpacks/builder");
|
|
||||||
ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-name"));
|
ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-name"));
|
||||||
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
||||||
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
||||||
|
@ -91,11 +89,9 @@ class BootBuildImageIntegrationTests {
|
||||||
void buildsImageWithCustomBuilderAndRunImage() throws IOException {
|
void buildsImageWithCustomBuilderAndRunImage() throws IOException {
|
||||||
writeMainClass();
|
writeMainClass();
|
||||||
writeLongNameResource();
|
writeLongNameResource();
|
||||||
BuildResult result = this.gradleBuild.build("bootBuildImage");
|
BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT");
|
||||||
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
||||||
assertThat(result.getOutput()).contains("example/test-image-custom");
|
assertThat(result.getOutput()).contains("example/test-image-custom");
|
||||||
assertThat(result.getOutput()).contains("paketobuildpacks/builder:full");
|
|
||||||
assertThat(result.getOutput()).contains("paketobuildpacks/run:full");
|
|
||||||
ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-custom"));
|
ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-custom"));
|
||||||
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
||||||
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
||||||
|
@ -109,12 +105,11 @@ class BootBuildImageIntegrationTests {
|
||||||
void buildsImageWithCommandLineOptions() throws IOException {
|
void buildsImageWithCommandLineOptions() throws IOException {
|
||||||
writeMainClass();
|
writeMainClass();
|
||||||
writeLongNameResource();
|
writeLongNameResource();
|
||||||
BuildResult result = this.gradleBuild.build("bootBuildImage", "--imageName=example/test-image-cmd",
|
BuildResult result = this.gradleBuild.build("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT",
|
||||||
"--builder=paketobuildpacks/builder:full", "--runImage=paketobuildpacks/run:full-cnb");
|
"--imageName=example/test-image-cmd", "--builder=paketobuildpacks/builder:full",
|
||||||
|
"--runImage=paketobuildpacks/run:full-cnb");
|
||||||
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.SUCCESS);
|
||||||
assertThat(result.getOutput()).contains("example/test-image-cmd");
|
assertThat(result.getOutput()).contains("example/test-image-cmd");
|
||||||
assertThat(result.getOutput()).contains("paketobuildpacks/builder:full");
|
|
||||||
assertThat(result.getOutput()).contains("paketobuildpacks/run:full");
|
|
||||||
ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-cmd"));
|
ImageReference imageReference = ImageReference.of(ImageName.of("example/test-image-cmd"));
|
||||||
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
||||||
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
||||||
|
@ -162,7 +157,7 @@ class BootBuildImageIntegrationTests {
|
||||||
void failsWithBuilderError() {
|
void failsWithBuilderError() {
|
||||||
writeMainClass();
|
writeMainClass();
|
||||||
writeLongNameResource();
|
writeLongNameResource();
|
||||||
BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage");
|
BuildResult result = this.gradleBuild.buildAndFail("bootBuildImage", "--pullPolicy=IF_NOT_PRESENT");
|
||||||
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED);
|
assertThat(result.task(":bootBuildImage").getOutcome()).isEqualTo(TaskOutcome.FAILED);
|
||||||
assertThat(result.getOutput()).containsPattern("Builder lifecycle '.*' failed with status code");
|
assertThat(result.getOutput()).containsPattern("Builder lifecycle '.*' failed with status code");
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,15 +47,18 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
||||||
|
|
||||||
@TestTemplate
|
@TestTemplate
|
||||||
void whenBuildImageIsInvokedWithoutRepackageTheArchiveIsRepackagedOnTheFly(MavenBuild mavenBuild) {
|
void whenBuildImageIsInvokedWithoutRepackageTheArchiveIsRepackagedOnTheFly(MavenBuild mavenBuild) {
|
||||||
mavenBuild.project("build-image").goals("package").prepare(this::writeLongNameResource).execute((project) -> {
|
mavenBuild.project("build-image").goals("package")
|
||||||
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
||||||
|
.prepare(this::writeLongNameResource).execute((project) -> {
|
||||||
File jar = new File(project, "target/build-image-0.0.1.BUILD-SNAPSHOT.jar");
|
File jar = new File(project, "target/build-image-0.0.1.BUILD-SNAPSHOT.jar");
|
||||||
assertThat(jar).isFile();
|
assertThat(jar).isFile();
|
||||||
File original = new File(project, "target/build-image-0.0.1.BUILD-SNAPSHOT.jar.original");
|
File original = new File(project, "target/build-image-0.0.1.BUILD-SNAPSHOT.jar.original");
|
||||||
assertThat(original).doesNotExist();
|
assertThat(original).doesNotExist();
|
||||||
assertThat(buildLog(project)).contains("Building image").contains("paketobuildpacks/builder")
|
assertThat(buildLog(project)).contains("Building image")
|
||||||
.contains("docker.io/library/build-image:0.0.1.BUILD-SNAPSHOT")
|
.contains("docker.io/library/build-image:0.0.1.BUILD-SNAPSHOT")
|
||||||
.contains("Successfully built image");
|
.contains("Successfully built image");
|
||||||
ImageReference imageReference = ImageReference.of(ImageName.of("build-image"), "0.0.1.BUILD-SNAPSHOT");
|
ImageReference imageReference = ImageReference.of(ImageName.of("build-image"),
|
||||||
|
"0.0.1.BUILD-SNAPSHOT");
|
||||||
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
||||||
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
||||||
}
|
}
|
||||||
|
@ -68,6 +71,7 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
||||||
@TestTemplate
|
@TestTemplate
|
||||||
void whenBuildImageIsInvokedWithCustomImageName(MavenBuild mavenBuild) {
|
void whenBuildImageIsInvokedWithCustomImageName(MavenBuild mavenBuild) {
|
||||||
mavenBuild.project("build-image-custom-name").goals("package")
|
mavenBuild.project("build-image-custom-name").goals("package")
|
||||||
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
||||||
.systemProperty("spring-boot.build-image.imageName", "example.com/test/property-ignored:pom-preferred")
|
.systemProperty("spring-boot.build-image.imageName", "example.com/test/property-ignored:pom-preferred")
|
||||||
.execute((project) -> {
|
.execute((project) -> {
|
||||||
File jar = new File(project, "target/build-image-custom-name-0.0.1.BUILD-SNAPSHOT.jar");
|
File jar = new File(project, "target/build-image-custom-name-0.0.1.BUILD-SNAPSHOT.jar");
|
||||||
|
@ -92,13 +96,13 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
||||||
@TestTemplate
|
@TestTemplate
|
||||||
void whenBuildImageIsInvokedWithCommandLineParameters(MavenBuild mavenBuild) {
|
void whenBuildImageIsInvokedWithCommandLineParameters(MavenBuild mavenBuild) {
|
||||||
mavenBuild.project("build-image").goals("package")
|
mavenBuild.project("build-image").goals("package")
|
||||||
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
||||||
.systemProperty("spring-boot.build-image.imageName", "example.com/test/cmd-property-name:v1")
|
.systemProperty("spring-boot.build-image.imageName", "example.com/test/cmd-property-name:v1")
|
||||||
.systemProperty("spring-boot.build-image.builder", "paketobuildpacks/builder:full")
|
.systemProperty("spring-boot.build-image.builder", "paketobuildpacks/builder:full")
|
||||||
.systemProperty("spring-boot.build-image.runImage", "paketobuildpacks/run:full-cnb")
|
.systemProperty("spring-boot.build-image.runImage", "paketobuildpacks/run:full-cnb")
|
||||||
.execute((project) -> {
|
.execute((project) -> {
|
||||||
assertThat(buildLog(project)).contains("Building image")
|
assertThat(buildLog(project)).contains("Building image")
|
||||||
.contains("example.com/test/cmd-property-name:v1").contains("paketobuildpacks/builder:full")
|
.contains("example.com/test/cmd-property-name:v1").contains("Successfully built image");
|
||||||
.contains("paketobuildpacks/run:full").contains("Successfully built image");
|
|
||||||
ImageReference imageReference = ImageReference.of("example.com/test/cmd-property-name:v1");
|
ImageReference imageReference = ImageReference.of("example.com/test/cmd-property-name:v1");
|
||||||
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
try (GenericContainer<?> container = new GenericContainer<>(imageReference.toString())) {
|
||||||
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
container.waitingFor(Wait.forLogMessage("Launched\\n", 1)).start();
|
||||||
|
@ -111,9 +115,9 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
||||||
|
|
||||||
@TestTemplate
|
@TestTemplate
|
||||||
void whenBuildImageIsInvokedWithCustomBuilderImageAndRunImage(MavenBuild mavenBuild) {
|
void whenBuildImageIsInvokedWithCustomBuilderImageAndRunImage(MavenBuild mavenBuild) {
|
||||||
mavenBuild.project("build-image-custom-builder").goals("package").execute((project) -> {
|
mavenBuild.project("build-image-custom-builder").goals("package")
|
||||||
assertThat(buildLog(project)).contains("Building image").contains("paketobuildpacks/builder:full")
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT").execute((project) -> {
|
||||||
.contains("paketobuildpacks/run:full")
|
assertThat(buildLog(project)).contains("Building image")
|
||||||
.contains("docker.io/library/build-image-v2-builder:0.0.1.BUILD-SNAPSHOT")
|
.contains("docker.io/library/build-image-v2-builder:0.0.1.BUILD-SNAPSHOT")
|
||||||
.contains("Successfully built image");
|
.contains("Successfully built image");
|
||||||
ImageReference imageReference = ImageReference
|
ImageReference imageReference = ImageReference
|
||||||
|
@ -129,9 +133,10 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
||||||
|
|
||||||
@TestTemplate
|
@TestTemplate
|
||||||
void whenBuildImageIsInvokedWithEmptyEnvEntry(MavenBuild mavenBuild) {
|
void whenBuildImageIsInvokedWithEmptyEnvEntry(MavenBuild mavenBuild) {
|
||||||
mavenBuild.project("build-image-empty-env-entry").goals("package").prepare(this::writeLongNameResource)
|
mavenBuild.project("build-image-empty-env-entry").goals("package")
|
||||||
.execute((project) -> {
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
||||||
assertThat(buildLog(project)).contains("Building image").contains("paketobuildpacks/builder")
|
.prepare(this::writeLongNameResource).execute((project) -> {
|
||||||
|
assertThat(buildLog(project)).contains("Building image")
|
||||||
.contains("docker.io/library/build-image-empty-env-entry:0.0.1.BUILD-SNAPSHOT")
|
.contains("docker.io/library/build-image-empty-env-entry:0.0.1.BUILD-SNAPSHOT")
|
||||||
.contains("Successfully built image");
|
.contains("Successfully built image");
|
||||||
ImageReference imageReference = ImageReference.of(ImageName.of("build-image-empty-env-entry"),
|
ImageReference imageReference = ImageReference.of(ImageName.of("build-image-empty-env-entry"),
|
||||||
|
@ -154,6 +159,7 @@ public class BuildImageTests extends AbstractArchiveIntegrationTests {
|
||||||
@TestTemplate
|
@TestTemplate
|
||||||
void failsWhenBuilderFails(MavenBuild mavenBuild) {
|
void failsWhenBuilderFails(MavenBuild mavenBuild) {
|
||||||
mavenBuild.project("build-image-builder-error").goals("package")
|
mavenBuild.project("build-image-builder-error").goals("package")
|
||||||
|
.systemProperty("spring-boot.build-image.pullPolicy", "IF_NOT_PRESENT")
|
||||||
.executeAndFail((project) -> assertThat(buildLog(project)).contains("Building image")
|
.executeAndFail((project) -> assertThat(buildLog(project)).contains("Building image")
|
||||||
.containsPattern("Builder lifecycle '.*' failed with status code"));
|
.containsPattern("Builder lifecycle '.*' failed with status code"));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue