Skip to content

Commit 1c0cc00

Browse files
committed
fix : Jib ignores DOCKER_REGISTRY environment variable (#1617)
JibBuildService should check all available registry options before submitting ImageConfiguration to Jib. Signed-off-by: Rohan Kumar <rohaan@redhat.com>
1 parent 920fde8 commit 1c0cc00

File tree

4 files changed

+68
-31
lines changed

4 files changed

+68
-31
lines changed

doc/changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# ChangeLog
22
* **0.42-SNAPSHOT** :
3+
- Support `docker run --platform` ([1641](https://github.com/fabric8io/docker-maven-plugin/issues/1641)) @chonton
4+
- Update buildx documentation to amplify the build behavior ([1646](https://github.com/fabric8io/docker-maven-plugin/pull/1646)) @chonton
5+
- Default to native platform when creating container ([1645](https://github.com/fabric8io/docker-maven-plugin/pull/1645)) @chonton
6+
- JIB ignores the `DOCKER_REGISTRY` environment variable ([1617](https://github.com/fabric8io/docker-maven-plugin/issues/1617)) @rohanKanojia
37

48
* **0.41.0** (2023-02-06):
59
- multi-arch build should use provided repository ([1597](https://github.com/fabric8io/docker-maven-plugin/issues/1597)) @merikan

src/main/java/io/fabric8/maven/docker/service/JibBuildService.java

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ public class JibBuildService {
3333
private static final List<String> DEFAULT_DOCKER_REGISTRIES = Arrays.asList(
3434
"docker.io", "index.docker.io", "registry.hub.docker.com"
3535
);
36-
private static final String PUSH_REGISTRY = ".docker.push.registry";
3736
private static final String ARCHIVE_FILE_NAME = "docker-build";
3837
private final Logger log;
3938
private final ServiceHub serviceHub;
@@ -51,10 +50,10 @@ public void build(String jibImageFormat, ImageConfiguration imageConfig, Registr
5150
if (imageConfig.getBuildConfiguration().isDockerFileMode()) {
5251
throw new MojoExecutionException("Dockerfile mode is not supported with JIB build strategy");
5352
}
54-
prependRegistry(imageConfig, mojoParameters.getProject().getProperties().getProperty(PUSH_REGISTRY));
53+
prepareImageConfiguration(imageConfig, registryConfig);
5554
BuildDirs buildDirs = new BuildDirs(imageConfig.getName(), mojoParameters);
5655
final Credential pullRegistryCredential = getRegistryCredentials(
57-
registryConfig, false, imageConfig, log);
56+
registryConfig, false, imageConfig);
5857
final JibContainerBuilder containerBuilder = containerFromImageConfiguration(jibImageFormat, imageConfig, pullRegistryCredential);
5958

6059
File dockerTarArchive = getAssemblyTarArchive(imageConfig, serviceHub, mojoParameters, log);
@@ -85,11 +84,11 @@ public void build(String jibImageFormat, ImageConfiguration imageConfig, Registr
8584
public void push(Collection<ImageConfiguration> imageConfigs, int retries, RegistryService.RegistryConfig registryConfig, boolean skipTag) throws MojoExecutionException {
8685
try {
8786
for (ImageConfiguration imageConfiguration : imageConfigs) {
88-
prependRegistry(imageConfiguration, registryConfig.getRegistry());
87+
prepareImageConfiguration(imageConfiguration, registryConfig);
8988
log.info("This push refers to: %s", imageConfiguration.getName());
9089
JibServiceUtil.jibPush(
9190
imageConfiguration,
92-
getRegistryCredentials(registryConfig, true, imageConfiguration, log),
91+
getRegistryCredentials(registryConfig, true, imageConfiguration),
9392
getBuildTarArchive(imageConfiguration, mojoParameters),
9493
log
9594
);
@@ -117,21 +116,14 @@ static File getAssemblyTarArchive(ImageConfiguration imageConfig, ServiceHub ser
117116
}
118117

119118
static Credential getRegistryCredentials(
120-
RegistryService.RegistryConfig registryConfig, boolean isPush, ImageConfiguration imageConfiguration, Logger log)
119+
RegistryService.RegistryConfig registryConfig, boolean isPush, ImageConfiguration imageConfiguration)
121120
throws MojoExecutionException {
122121

123122
String registry;
124123
if (isPush) {
125-
registry = EnvUtil.firstRegistryOf(
126-
new ImageName(imageConfiguration.getName()).getRegistry(),
127-
imageConfiguration.getRegistry(),
128-
registryConfig.getRegistry()
129-
);
124+
registry = getConfiguredPushRegistry(registryConfig, imageConfiguration);
130125
} else {
131-
registry = EnvUtil.firstRegistryOf(
132-
new ImageName(getBaseImage(imageConfiguration)).getRegistry(),
133-
registryConfig.getRegistry()
134-
);
126+
registry = getConfiguredPullRegistry(registryConfig, imageConfiguration);
135127
}
136128
if (registry == null || DEFAULT_DOCKER_REGISTRIES.contains(registry)) {
137129
registry = DOCKER_LOGIN_DEFAULT_REGISTRY; // Let's assume docker is default registry.
@@ -150,4 +142,25 @@ static File getBuildTarArchive(ImageConfiguration imageConfiguration, MojoParame
150142
BuildDirs buildDirs = new BuildDirs(imageConfiguration.getName(), mojoParameters);
151143
return new File(buildDirs.getTemporaryRootDirectory(), ARCHIVE_FILE_NAME + "." + ArchiveCompression.none.getFileSuffix());
152144
}
145+
146+
static ImageConfiguration prepareImageConfiguration(ImageConfiguration imageConfig, RegistryService.RegistryConfig registryConfig) {
147+
String configuredRegistry = getConfiguredPushRegistry(registryConfig, imageConfig);
148+
prependRegistry(imageConfig, configuredRegistry);
149+
return imageConfig;
150+
}
151+
152+
private static String getConfiguredPushRegistry(RegistryService.RegistryConfig registryConfig, ImageConfiguration imageConfiguration) {
153+
return EnvUtil.firstRegistryOf(
154+
new ImageName(imageConfiguration.getName()).getRegistry(),
155+
imageConfiguration.getRegistry(),
156+
registryConfig.getRegistry()
157+
);
158+
}
159+
160+
private static String getConfiguredPullRegistry(RegistryService.RegistryConfig registryConfig, ImageConfiguration imageConfiguration) {
161+
return EnvUtil.firstRegistryOf(
162+
new ImageName(getBaseImage(imageConfiguration)).getRegistry(),
163+
registryConfig.getRegistry()
164+
);
165+
}
153166
}

src/main/java/io/fabric8/maven/docker/util/JibServiceUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ static Set<String> getAllImageTags(List<String> tags, String imageName) {
204204
}
205205

206206
static ImageFormat getImageFormat(String jibImageFormat) {
207-
if (jibImageFormat != null && jibImageFormat.toLowerCase().equalsIgnoreCase("oci")) {
207+
if (jibImageFormat != null && jibImageFormat.equalsIgnoreCase("oci")) {
208208
return ImageFormat.OCI;
209209
}
210210
return ImageFormat.Docker;

src/test/java/io/fabric8/maven/docker/service/JibBuildServiceTest.java

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@
66
import java.nio.file.Path;
77
import java.util.Collections;
88
import java.util.List;
9-
import java.util.Properties;
109

1110
import com.google.cloud.tools.jib.api.Credential;
12-
import com.google.cloud.tools.jib.api.TarImage;
1311

12+
import io.fabric8.maven.docker.util.EnvUtil;
1413
import org.apache.maven.plugin.MojoExecutionException;
1514
import org.apache.maven.project.MavenProject;
1615
import org.apache.maven.settings.Settings;
@@ -33,6 +32,10 @@
3332
import io.fabric8.maven.docker.util.Logger;
3433
import io.fabric8.maven.docker.util.MojoParameters;
3534

35+
import static io.fabric8.maven.docker.service.JibBuildService.prepareImageConfiguration;
36+
import static org.junit.jupiter.api.Assertions.assertEquals;
37+
import static org.mockito.Mockito.mockStatic;
38+
3639
@ExtendWith(MockitoExtension.class)
3740
class JibBuildServiceTest {
3841

@@ -70,11 +73,11 @@ void testGetRegistryCredentialsForPush() throws MojoExecutionException {
7073
mockAuthConfigFactory(true, registryConfig);
7174
// When
7275
Credential credential = JibBuildService.getRegistryCredentials(
73-
registryConfig, true, imageConfiguration, logger);
76+
registryConfig, true, imageConfiguration);
7477
// Then
7578
Assertions.assertNotNull(credential);
76-
Assertions.assertEquals("testuserpush", credential.getUsername());
77-
Assertions.assertEquals("testpass", credential.getPassword());
79+
assertEquals("testuserpush", credential.getUsername());
80+
assertEquals("testpass", credential.getPassword());
7881
}
7982

8083
@Test
@@ -90,11 +93,11 @@ void testGetRegistryCredentialsForPull() throws MojoExecutionException {
9093
mockAuthConfigFactory(false, registryConfig);
9194
// When
9295
Credential credential = JibBuildService.getRegistryCredentials(
93-
registryConfig, false, imageConfiguration, logger);
96+
registryConfig, false, imageConfiguration);
9497
// Then
9598
Assertions.assertNotNull(credential);
96-
Assertions.assertEquals("testuserpull", credential.getUsername());
97-
Assertions.assertEquals("testpass", credential.getPassword());
99+
assertEquals("testuserpull", credential.getUsername());
100+
assertEquals("testpass", credential.getPassword());
98101
}
99102

100103
@Test
@@ -109,7 +112,7 @@ void testGetBuildTarArchive() throws IOException {
109112

110113
// Then
111114
Assertions.assertNotNull(tarArchive);
112-
Assertions.assertEquals(new File("/target/test/testimage/0.0.1/tmp/docker-build.tar").getPath(),
115+
assertEquals(new File("/target/test/testimage/0.0.1/tmp/docker-build.tar").getPath(),
113116
tarArchive.getAbsolutePath().substring(projectBaseDir.getAbsolutePath().length()));
114117
}
115118

@@ -126,7 +129,7 @@ void testGetAssemblyTarArchive() throws IOException, MojoExecutionException {
126129

127130
// Then
128131
Assertions.assertNotNull(tarArchive);
129-
Assertions.assertEquals(new File("/target/test/testimage/0.0.1/tmp/docker-build.tar").getPath(),
132+
assertEquals(new File("/target/test/testimage/0.0.1/tmp/docker-build.tar").getPath(),
130133
tarArchive.getAbsolutePath().substring(projectBaseDir.toString().length()));
131134
}
132135

@@ -138,12 +141,12 @@ void testPrependRegistry() {
138141
JibBuildService.prependRegistry(imageConfiguration, "quay.io");
139142
// Then
140143
Assertions.assertNotNull(imageConfiguration);
141-
Assertions.assertEquals("quay.io/test/testimage:0.0.1", imageConfiguration.getName());
144+
assertEquals("quay.io/test/testimage:0.0.1", imageConfiguration.getName());
142145
}
143146

144147
@Test
145148
void testPushWithNoConfigurations() {
146-
try (MockedStatic<JibServiceUtil> jibServiceUtilMock = Mockito.mockStatic(JibServiceUtil.class)) {
149+
try (MockedStatic<JibServiceUtil> jibServiceUtilMock = mockStatic(JibServiceUtil.class)) {
147150
// Given
148151
jibServiceUtilMock
149152
.when(() -> JibServiceUtil.jibPush(Mockito.any(ImageConfiguration.class), Mockito.any(Credential.class), Mockito.any(File.class), Mockito.any(Logger.class)))
@@ -159,7 +162,6 @@ void testPushWithNoConfigurations() {
159162
@Test
160163
void testBuildCallsBuildContainer(@TempDir Path tmpDir) throws Exception {
161164
// ARRANGE
162-
Mockito.when(project.getProperties()).thenReturn(new Properties());
163165
setupServiceHubExpectations(tmpDir.toFile());
164166
setupDockerAssemblyExpectations(tmpDir);
165167
final RegistryService.RegistryConfig registryConfig = new RegistryService.RegistryConfig.Builder()
@@ -170,7 +172,7 @@ void testBuildCallsBuildContainer(@TempDir Path tmpDir) throws Exception {
170172
JibBuildService jibBuildService = new JibBuildService(serviceHub, params, logger);
171173
ImageConfiguration imageConfiguration = getImageConfiguration();
172174

173-
try (MockedStatic<JibServiceUtil> jibServiceUtilMock = Mockito.mockStatic(JibServiceUtil.class)) {
175+
try (MockedStatic<JibServiceUtil> jibServiceUtilMock = mockStatic(JibServiceUtil.class)) {
174176
jibServiceUtilMock.when(() -> JibServiceUtil.getBaseImage(imageConfiguration)).thenCallRealMethod();
175177
// ACT
176178
jibBuildService.build("docker", imageConfiguration, registryConfig);
@@ -183,7 +185,7 @@ void testBuildCallsBuildContainer(@TempDir Path tmpDir) throws Exception {
183185
@Test
184186
@Disabled("Cannot intercept JibServiceUtil.pushImage() to prevent actual image creation")
185187
void testPushWithConfiguration(@TempDir Path tmpDir) throws Exception {
186-
try (MockedStatic<JibServiceUtil> jibServiceUtilMock = Mockito.mockStatic(JibServiceUtil.class)) {
188+
try (MockedStatic<JibServiceUtil> jibServiceUtilMock = mockStatic(JibServiceUtil.class)) {
187189
// Given
188190
setupServiceHubExpectations(tmpDir.toFile());
189191
setupDockerAssemblyExpectations(tmpDir);
@@ -204,6 +206,24 @@ void testPushWithConfiguration(@TempDir Path tmpDir) throws Exception {
204206
}
205207
}
206208

209+
@Test
210+
void prepareImageConfiguration_whenDockerRegistryPropertySet_thenImageConfigurationShouldHaveRegistry() {
211+
try (MockedStatic<EnvUtil> envUtilMockedStatic = mockStatic(EnvUtil.class)) {
212+
// Given
213+
envUtilMockedStatic.when(() -> EnvUtil.firstRegistryOf(null, null, null)).thenReturn("registry-from-docker-registry-env.io");
214+
ImageConfiguration imageConfiguration = new ImageConfiguration.Builder()
215+
.name("test/foo:bar")
216+
.build();
217+
RegistryService.RegistryConfig registryConfig = new RegistryService.RegistryConfig();
218+
219+
// When
220+
ImageConfiguration result = prepareImageConfiguration(imageConfiguration, registryConfig);
221+
222+
// Then
223+
assertEquals("registry-from-docker-registry-env.io/test/foo:bar", result.getName());
224+
}
225+
}
226+
207227
private ImageConfiguration getImageConfiguration() {
208228
return new ImageConfiguration.Builder()
209229
.name("test/testimage:0.0.1")

0 commit comments

Comments
 (0)