Add Docker configuration authentication to Maven and Gradle plugins
Update the Maven and Gradle plugins to make use of the new Docker configuration authentication support. See gh-45269 Signed-off-by: Dmytro Nosan <dimanosan@gmail.com> Co-authored-by: Phillip Webb <phil.webb@broadcom.com>
This commit is contained in:
committed by
Phillip Webb
parent
e6fbccef7e
commit
da61d63db8
@@ -100,6 +100,18 @@ The following table summarizes the available properties for `docker.builderRegis
|
||||
|
||||
For more details, see also xref:packaging-oci-image.adoc#build-image.examples.docker[examples].
|
||||
|
||||
[NOTE]
|
||||
====
|
||||
If credentials are not provided, the plugin reads the user's existing Docker configuration file (typically located at `$HOME/.docker/config.json`) to determine authentication methods.
|
||||
Using these methods, the plugin attempts to provide authentication credentials for the requested image.
|
||||
|
||||
The plugin supports the following authentication methods:
|
||||
|
||||
- *Credential Helpers*: External tools configured in the Docker configuration file to provide credentials for specific registries. For example, tools like `osxkeychain` or `ecr-login` handle authentication for certain registries.
|
||||
- *Credential Store*: A default fallback mechanism that securely stores and retrieves credentials (e.g., `desktop` for Docker Desktop).
|
||||
- *Static Credentials*: Credentials that are stored directly in the Docker configuration file under the `auths` section.
|
||||
====
|
||||
|
||||
|
||||
|
||||
[[build-image.customization]]
|
||||
|
||||
@@ -145,13 +145,14 @@ public abstract class DockerSpec {
|
||||
}
|
||||
|
||||
private BuilderDockerConfiguration customizeBuilderAuthentication(BuilderDockerConfiguration dockerConfiguration) {
|
||||
return dockerConfiguration
|
||||
.withBuilderRegistryAuthentication(getRegistryAuthentication("builder", this.builderRegistry, null));
|
||||
return dockerConfiguration.withBuilderRegistryAuthentication(getRegistryAuthentication("builder",
|
||||
this.builderRegistry, DockerRegistryAuthentication.configuration(null)));
|
||||
}
|
||||
|
||||
private BuilderDockerConfiguration customizePublishAuthentication(BuilderDockerConfiguration dockerConfiguration) {
|
||||
return dockerConfiguration.withPublishRegistryAuthentication(
|
||||
getRegistryAuthentication("publish", this.publishRegistry, DockerRegistryAuthentication.EMPTY_USER));
|
||||
return dockerConfiguration
|
||||
.withPublishRegistryAuthentication(getRegistryAuthentication("publish", this.publishRegistry,
|
||||
DockerRegistryAuthentication.configuration(DockerRegistryAuthentication.EMPTY_USER)));
|
||||
}
|
||||
|
||||
private DockerRegistryAuthentication getRegistryAuthentication(String type, DockerRegistrySpec registry,
|
||||
|
||||
@@ -54,7 +54,7 @@ class DockerSpecTests {
|
||||
void asDockerConfigurationWithDefaults() {
|
||||
BuilderDockerConfiguration dockerConfiguration = this.dockerSpec.asDockerConfiguration();
|
||||
assertThat(dockerConfiguration.connection()).isNull();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication()).isNull();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication().getAuthHeader()).isNull();
|
||||
assertThat(decoded(dockerConfiguration.publishRegistryAuthentication().getAuthHeader()))
|
||||
.contains("\"username\" : \"\"")
|
||||
.contains("\"password\" : \"\"")
|
||||
@@ -73,7 +73,7 @@ class DockerSpecTests {
|
||||
assertThat(host.secure()).isTrue();
|
||||
assertThat(host.certificatePath()).isEqualTo("/tmp/ca-cert");
|
||||
assertThat(dockerConfiguration.bindHostToBuilder()).isFalse();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication()).isNull();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication().getAuthHeader()).isNull();
|
||||
assertThat(decoded(dockerConfiguration.publishRegistryAuthentication().getAuthHeader()))
|
||||
.contains("\"username\" : \"\"")
|
||||
.contains("\"password\" : \"\"")
|
||||
@@ -90,7 +90,7 @@ class DockerSpecTests {
|
||||
assertThat(host.secure()).isFalse();
|
||||
assertThat(host.certificatePath()).isNull();
|
||||
assertThat(dockerConfiguration.bindHostToBuilder()).isFalse();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication()).isNull();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication().getAuthHeader()).isNull();
|
||||
assertThat(decoded(dockerConfiguration.publishRegistryAuthentication().getAuthHeader()))
|
||||
.contains("\"username\" : \"\"")
|
||||
.contains("\"password\" : \"\"")
|
||||
@@ -106,7 +106,7 @@ class DockerSpecTests {
|
||||
.connection();
|
||||
assertThat(host.context()).isEqualTo("test-context");
|
||||
assertThat(dockerConfiguration.bindHostToBuilder()).isFalse();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication()).isNull();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication().getAuthHeader()).isNull();
|
||||
assertThat(decoded(dockerConfiguration.publishRegistryAuthentication().getAuthHeader()))
|
||||
.contains("\"username\" : \"\"")
|
||||
.contains("\"password\" : \"\"")
|
||||
@@ -132,7 +132,7 @@ class DockerSpecTests {
|
||||
assertThat(host.secure()).isFalse();
|
||||
assertThat(host.certificatePath()).isNull();
|
||||
assertThat(dockerConfiguration.bindHostToBuilder()).isTrue();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication()).isNull();
|
||||
assertThat(dockerConfiguration.builderRegistryAuthentication().getAuthHeader()).isNull();
|
||||
assertThat(decoded(dockerConfiguration.publishRegistryAuthentication().getAuthHeader()))
|
||||
.contains("\"username\" : \"\"")
|
||||
.contains("\"password\" : \"\"")
|
||||
@@ -213,7 +213,7 @@ class DockerSpecTests {
|
||||
}
|
||||
|
||||
String decoded(String value) {
|
||||
return new String(Base64.getDecoder().decode(value));
|
||||
return (value != null) ? new String(Base64.getDecoder().decode(value)) : value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user