Add pullPolicy option for image building
This commit adds a pullPolicy option to the configuration of the Maven plugin spring-boot:build-image goal and the Gradle plugin bootBuildImage task. The new option gives users control over pulling the builder image and run image from a remote image registry to the local Docker daemon. See gh-22736
This commit is contained in:
committed by
Scott Frederick
parent
b35cfb7fb7
commit
c7449b57ce
@@ -42,6 +42,7 @@ import org.springframework.boot.buildpack.platform.build.BuildLog;
|
||||
import org.springframework.boot.buildpack.platform.build.BuildRequest;
|
||||
import org.springframework.boot.buildpack.platform.build.Builder;
|
||||
import org.springframework.boot.buildpack.platform.build.Creator;
|
||||
import org.springframework.boot.buildpack.platform.build.PullPolicy;
|
||||
import org.springframework.boot.buildpack.platform.docker.TotalProgressEvent;
|
||||
import org.springframework.boot.buildpack.platform.io.Owner;
|
||||
import org.springframework.boot.buildpack.platform.io.TarArchive;
|
||||
@@ -123,6 +124,13 @@ public class BuildImageMojo extends AbstractPackagerMojo {
|
||||
@Parameter(property = "spring-boot.build-image.runImage", readonly = true)
|
||||
String runImage;
|
||||
|
||||
/**
|
||||
* Alias for {@link Image#pullPolicy} to support configuration via command-line
|
||||
* property.
|
||||
*/
|
||||
@Parameter(property = "spring-boot.build-image.pullPolicy", readonly = true)
|
||||
PullPolicy pullPolicy;
|
||||
|
||||
@Override
|
||||
public void execute() throws MojoExecutionException {
|
||||
if (this.project.getPackaging().equals("pom")) {
|
||||
@@ -160,6 +168,9 @@ public class BuildImageMojo extends AbstractPackagerMojo {
|
||||
if (image.runImage == null && this.runImage != null) {
|
||||
image.setRunImage(this.runImage);
|
||||
}
|
||||
if (image.pullPolicy == null && this.pullPolicy != null) {
|
||||
image.setPullPolicy(this.pullPolicy);
|
||||
}
|
||||
return customize(image.getBuildRequest(this.project.getArtifact(), content));
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@ import java.util.function.Function;
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
|
||||
import org.springframework.boot.buildpack.platform.build.BuildRequest;
|
||||
import org.springframework.boot.buildpack.platform.build.PullPolicy;
|
||||
import org.springframework.boot.buildpack.platform.docker.type.ImageName;
|
||||
import org.springframework.boot.buildpack.platform.docker.type.ImageReference;
|
||||
import org.springframework.boot.buildpack.platform.io.Owner;
|
||||
@@ -67,6 +68,11 @@ public class Image {
|
||||
*/
|
||||
boolean verboseLogging;
|
||||
|
||||
/**
|
||||
* If images should be pulled from a remote repository during image build.
|
||||
*/
|
||||
PullPolicy pullPolicy;
|
||||
|
||||
void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
@@ -79,6 +85,10 @@ public class Image {
|
||||
this.runImage = runImage;
|
||||
}
|
||||
|
||||
public void setPullPolicy(PullPolicy pullPolicy) {
|
||||
this.pullPolicy = pullPolicy;
|
||||
}
|
||||
|
||||
BuildRequest getBuildRequest(Artifact artifact, Function<Owner, TarArchive> applicationContent) {
|
||||
return customize(BuildRequest.of(getOrDeduceName(artifact), applicationContent));
|
||||
}
|
||||
@@ -103,6 +113,9 @@ public class Image {
|
||||
}
|
||||
request = request.withCleanCache(this.cleanCache);
|
||||
request = request.withVerboseLogging(this.verboseLogging);
|
||||
if (this.pullPolicy != null) {
|
||||
request = request.withPullPolicy(this.pullPolicy);
|
||||
}
|
||||
return request;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.apache.maven.artifact.versioning.VersionRange;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.buildpack.platform.build.BuildRequest;
|
||||
import org.springframework.boot.buildpack.platform.build.PullPolicy;
|
||||
import org.springframework.boot.buildpack.platform.io.Owner;
|
||||
import org.springframework.boot.buildpack.platform.io.TarArchive;
|
||||
|
||||
@@ -63,6 +64,7 @@ class ImageTests {
|
||||
assertThat(request.getEnv()).isEmpty();
|
||||
assertThat(request.isCleanCache()).isFalse();
|
||||
assertThat(request.isVerboseLogging()).isFalse();
|
||||
assertThat(request.getPullPolicy()).isEqualTo(PullPolicy.ALWAYS);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -105,6 +107,14 @@ class ImageTests {
|
||||
assertThat(request.isVerboseLogging()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void getBuildRequestWhenHasPullPolicyUsesPullPolicy() {
|
||||
Image image = new Image();
|
||||
image.setPullPolicy(PullPolicy.NEVER);
|
||||
BuildRequest request = image.getBuildRequest(createArtifact(), mockApplicationContent());
|
||||
assertThat(request.getPullPolicy()).isEqualTo(PullPolicy.NEVER);
|
||||
}
|
||||
|
||||
private Artifact createArtifact() {
|
||||
return new DefaultArtifact("com.example", "my-app", VersionRange.createFromVersion("0.0.1-SNAPSHOT"), "compile",
|
||||
"jar", null, new DefaultArtifactHandler());
|
||||
|
||||
Reference in New Issue
Block a user