Skip to content

Commit

Permalink
Merge pull request #8288 from geoand/#8282
Browse files Browse the repository at this point in the history
Allow Jib to pull the base image from a private registry
  • Loading branch information
geoand authored Mar 31, 2020
2 parents dded561 + 36057fc commit 19592ed
Showing 1 changed file with 20 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public void buildFromJar(ContainerImageConfig containerImageConfig, JibConfig ji
return;
}

JibContainerBuilder jibContainerBuilder = createContainerBuilderFromJar(jibConfig,
JibContainerBuilder jibContainerBuilder = createContainerBuilderFromJar(containerImageConfig, jibConfig,
sourceJarBuildItem,
outputTargetBuildItem,
mainClassBuildItem);
Expand Down Expand Up @@ -102,7 +102,8 @@ public void buildFromNative(ContainerImageConfig containerImageConfig, JibConfig
"The native binary produced by the build is not a Linux binary and therefore cannot be used in a Linux container image. Consider adding \"quarkus.native.container-build=true\" to your configuration");
}

JibContainerBuilder jibContainerBuilder = createContainerBuilderFromNative(jibConfig, nativeImageBuildItem);
JibContainerBuilder jibContainerBuilder = createContainerBuilderFromNative(containerImageConfig, jibConfig,
nativeImageBuildItem);
JibContainer container = containerize(applicationInfo, containerImageConfig, jibConfig, jibContainerBuilder,
pushRequest.isPresent());

Expand Down Expand Up @@ -138,14 +139,7 @@ private Containerizer createContainerizer(ContainerImageConfig containerImageCon
if (!containerImageConfig.registry.isPresent()) {
log.info("No container image registry was set, so 'docker.io' will be used");
}
CredentialRetrieverFactory credentialRetrieverFactory = CredentialRetrieverFactory.forImage(imageReference,
log::info);
RegistryImage registryImage = RegistryImage.named(imageReference);
registryImage.addCredentialRetriever(credentialRetrieverFactory.wellKnownCredentialHelpers());
registryImage.addCredentialRetriever(credentialRetrieverFactory.dockerConfig());
if (containerImageConfig.username.isPresent() && containerImageConfig.password.isPresent()) {
registryImage.addCredential(containerImageConfig.username.get(), containerImageConfig.password.get());
}
RegistryImage registryImage = toRegistryImage(imageReference, containerImageConfig);
containerizer = Containerizer.to(registryImage);
} else {
containerizer = Containerizer.to(DockerDaemonImage.named(imageReference));
Expand All @@ -160,6 +154,18 @@ private Containerizer createContainerizer(ContainerImageConfig containerImageCon
return containerizer;
}

private RegistryImage toRegistryImage(ImageReference imageReference, ContainerImageConfig containerImageConfig) {
CredentialRetrieverFactory credentialRetrieverFactory = CredentialRetrieverFactory.forImage(imageReference,
log::info);
RegistryImage registryImage = RegistryImage.named(imageReference);
registryImage.addCredentialRetriever(credentialRetrieverFactory.wellKnownCredentialHelpers());
registryImage.addCredentialRetriever(credentialRetrieverFactory.dockerConfig());
if (containerImageConfig.username.isPresent() && containerImageConfig.password.isPresent()) {
registryImage.addCredential(containerImageConfig.username.get(), containerImageConfig.password.get());
}
return registryImage;
}

private Logger.Level toJBossLoggingLevel(LogEvent.Level level) {
switch (level) {
case ERROR:
Expand All @@ -181,15 +187,15 @@ private ImageReference getImageReference(ContainerImageConfig containerImageConf
containerImageConfig.tag.orElse(applicationInfo.getVersion()));
}

private JibContainerBuilder createContainerBuilderFromJar(JibConfig jibConfig,
private JibContainerBuilder createContainerBuilderFromJar(ContainerImageConfig containerImageConfig, JibConfig jibConfig,
JarBuildItem sourceJarBuildItem,
OutputTargetBuildItem outputTargetBuildItem, MainClassBuildItem mainClassBuildItem) {
try {
// not ideal since this has been previously zipped - we would like to just reuse it
Path classesDir = outputTargetBuildItem.getOutputDirectory().resolve("jib");
ZipUtils.unzip(sourceJarBuildItem.getPath(), classesDir);
JavaContainerBuilder javaContainerBuilder = JavaContainerBuilder
.from(jibConfig.baseJvmImage)
.from(toRegistryImage(ImageReference.parse(jibConfig.baseJvmImage), containerImageConfig))
.addResources(classesDir, IS_CLASS_PREDICATE.negate())
.addClasses(classesDir, IS_CLASS_PREDICATE)
.addJvmFlags(jibConfig.jvmArguments)
Expand All @@ -213,14 +219,14 @@ private JibContainerBuilder createContainerBuilderFromJar(JibConfig jibConfig,
}
}

private JibContainerBuilder createContainerBuilderFromNative(JibConfig jibConfig,
private JibContainerBuilder createContainerBuilderFromNative(ContainerImageConfig containerImageConfig, JibConfig jibConfig,
NativeImageBuildItem nativeImageBuildItem) {
List<String> entrypoint = new ArrayList<>(jibConfig.nativeArguments.size() + 1);
entrypoint.add("./" + BINARY_NAME_IN_CONTAINER);
entrypoint.addAll(jibConfig.nativeArguments);
try {
AbsoluteUnixPath workDirInContainer = AbsoluteUnixPath.get("/work");
return Jib.from(jibConfig.baseNativeImage)
return Jib.from(toRegistryImage(ImageReference.parse(jibConfig.baseNativeImage), containerImageConfig))
.addLayer(LayerConfiguration.builder()
.addEntry(nativeImageBuildItem.getPath(), workDirInContainer.resolve(BINARY_NAME_IN_CONTAINER),
FilePermissions.fromOctalString("775"))
Expand Down

0 comments on commit 19592ed

Please sign in to comment.