Skip to content

Commit

Permalink
Merge pull request #38324 from geoand/#38320
Browse files Browse the repository at this point in the history
Support using tars and docker daemon as base image for Jib
  • Loading branch information
geoand committed Jan 22, 2024
2 parents 7aedf49 + a47821d commit 4f11fdf
Showing 1 changed file with 22 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,15 @@ private void doWriteOutputFile(OutputTargetBuildItem outputTarget, Path configPa
}
}

private JibContainerBuilder toJibContainerBuilder(String baseImage, ContainerImageJibConfig jibConfig)
throws InvalidImageReferenceException {
if (baseImage.startsWith(Jib.TAR_IMAGE_PREFIX) || baseImage.startsWith(Jib.DOCKER_DAEMON_IMAGE_PREFIX)) {
return Jib.from(baseImage);
}
return Jib.from(toRegistryImage(ImageReference.parse(baseImage), jibConfig.baseRegistryUsername,
jibConfig.baseRegistryPassword));
}

private RegistryImage toRegistryImage(ImageReference imageReference, Optional<String> username, Optional<String> password) {
CredentialRetrieverFactory credentialRetrieverFactory = CredentialRetrieverFactory.forImage(imageReference,
log::info);
Expand Down Expand Up @@ -519,9 +528,7 @@ private JibContainerBuilder createContainerBuilderFromFastJar(String baseJvmImag
Instant now = Instant.now();
Instant modificationTime = jibConfig.useCurrentTimestampFileModification ? now : Instant.EPOCH;

JibContainerBuilder jibContainerBuilder = Jib
.from(toRegistryImage(ImageReference.parse(baseJvmImage), jibConfig.baseRegistryUsername,
jibConfig.baseRegistryPassword));
JibContainerBuilder jibContainerBuilder = toJibContainerBuilder(baseJvmImage, jibConfig);
if (fastChangingLibPaths.isEmpty()) {
// just create a layer with the entire lib structure intact
addLayer(jibContainerBuilder, Collections.singletonList(componentsPath.resolve(JarResultBuildStep.LIB)),
Expand Down Expand Up @@ -718,9 +725,17 @@ private JibContainerBuilder createContainerBuilderFromLegacyJar(String baseJvmIm
// 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(toRegistryImage(ImageReference.parse(baseJvmImage), jibConfig.baseRegistryUsername,
jibConfig.baseRegistryPassword))

JavaContainerBuilder javaContainerBuilder;
if (baseJvmImage.startsWith(Jib.TAR_IMAGE_PREFIX) || baseJvmImage.startsWith(Jib.DOCKER_DAEMON_IMAGE_PREFIX)) {
javaContainerBuilder = JavaContainerBuilder.from(baseJvmImage);
} else {
javaContainerBuilder = JavaContainerBuilder
.from(toRegistryImage(ImageReference.parse(baseJvmImage), jibConfig.baseRegistryUsername,
jibConfig.baseRegistryPassword));
}

javaContainerBuilder = javaContainerBuilder
.addResources(classesDir, IS_CLASS_PREDICATE.negate())
.addClasses(classesDir, IS_CLASS_PREDICATE);

Expand Down Expand Up @@ -778,9 +793,7 @@ private JibContainerBuilder createContainerBuilderFromNative(ContainerImageJibCo
}
try {
AbsoluteUnixPath workDirInContainer = AbsoluteUnixPath.get("/work");
JibContainerBuilder jibContainerBuilder = Jib
.from(toRegistryImage(ImageReference.parse(jibConfig.baseNativeImage), jibConfig.baseRegistryUsername,
jibConfig.baseRegistryPassword))
JibContainerBuilder jibContainerBuilder = toJibContainerBuilder(jibConfig.baseNativeImage, jibConfig)
.addFileEntriesLayer(FileEntriesLayer.builder()
.addEntry(nativeImageBuildItem.getPath(), workDirInContainer.resolve(BINARY_NAME_IN_CONTAINER),
FilePermissions.fromOctalString("775"))
Expand Down

0 comments on commit 4f11fdf

Please sign in to comment.