use of com.google.cloud.tools.jib.api.ImageReference in project jib by GoogleContainerTools.
the class ContainerBuilders method create.
/**
* Creates a {@link JibContainerBuilder} depending on the base image specified.
*
* @param baseImageReference base image reference
* @param platforms platforms for multi-platform support in build command
* @param commonCliOptions common cli options
* @param logger console logger
* @return a {@link JibContainerBuilder}
* @throws InvalidImageReferenceException if the baseImage reference cannot be parsed
* @throws FileNotFoundException if credential helper file cannot be found
*/
public static JibContainerBuilder create(String baseImageReference, Set<Platform> platforms, CommonCliOptions commonCliOptions, ConsoleLogger logger) throws InvalidImageReferenceException, FileNotFoundException {
if (baseImageReference.startsWith(DOCKER_DAEMON_IMAGE_PREFIX)) {
return Jib.from(DockerDaemonImage.named(baseImageReference.replaceFirst(DOCKER_DAEMON_IMAGE_PREFIX, "")));
}
if (baseImageReference.startsWith(TAR_IMAGE_PREFIX)) {
return Jib.from(TarImage.at(Paths.get(baseImageReference.replaceFirst(TAR_IMAGE_PREFIX, ""))));
}
ImageReference imageReference = ImageReference.parse(baseImageReference.replaceFirst(REGISTRY_IMAGE_PREFIX, ""));
RegistryImage registryImage = RegistryImage.named(imageReference);
DefaultCredentialRetrievers defaultCredentialRetrievers = DefaultCredentialRetrievers.init(CredentialRetrieverFactory.forImage(imageReference, logEvent -> logger.log(logEvent.getLevel(), logEvent.getMessage())));
Credentials.getFromCredentialRetrievers(commonCliOptions, defaultCredentialRetrievers).forEach(registryImage::addCredentialRetriever);
JibContainerBuilder containerBuilder = Jib.from(registryImage);
if (!platforms.isEmpty()) {
containerBuilder.setPlatforms(platforms);
}
return containerBuilder;
}
use of com.google.cloud.tools.jib.api.ImageReference in project jib by GoogleContainerTools.
the class JibBuildRunnerTest method testBuildImage_writesImageJson.
@Test
public void testBuildImage_writesImageJson() throws Exception {
final ImageReference targetImageReference = ImageReference.parse("gcr.io/distroless/java:11");
final String imageId = "sha256:61bb3ec31a47cb730eb58a38bbfa813761a51dca69d10e39c24c3d00a7b2c7a9";
final String digest = "sha256:3f1be7e19129edb202c071a659a4db35280ab2bb1a16f223bfd5d1948657b6fc";
final Set<String> tags = ImmutableSet.of("latest", "0.1.41-69d10e-20200116T101403");
final Path outputPath = temporaryFolder.newFile("jib-image.json").toPath();
Mockito.when(mockJibContainer.getTargetImage()).thenReturn(targetImageReference);
Mockito.when(mockJibContainer.getImageId()).thenReturn(DescriptorDigest.fromDigest(imageId));
Mockito.when(mockJibContainer.getDigest()).thenReturn(DescriptorDigest.fromDigest(digest));
Mockito.when(mockJibContainer.getTags()).thenReturn(tags);
Mockito.when(mockJibContainerBuilder.containerize(mockContainerizer)).thenReturn(mockJibContainer);
testJibBuildRunner.writeImageJson(outputPath).runBuild();
final String outputJson = new String(Files.readAllBytes(outputPath), StandardCharsets.UTF_8);
final ImageMetadataOutput metadataOutput = ImageMetadataOutput.fromJson(outputJson);
Assert.assertEquals(targetImageReference.toString(), metadataOutput.getImage());
Assert.assertEquals(imageId, metadataOutput.getImageId());
Assert.assertEquals(digest, metadataOutput.getImageDigest());
Assert.assertEquals(tags, ImmutableSet.copyOf(metadataOutput.getTags()));
}
use of com.google.cloud.tools.jib.api.ImageReference in project jib by GoogleContainerTools.
the class PluginConfigurationProcessor method createJibBuildRunnerForDockerDaemonImage.
/**
* Generate a runner for image builds to docker daemon.
*
* @param rawConfiguration the raw configuration from the plugin
* @param inferredAuthProvider the plugin specific auth provider
* @param projectProperties an plugin specific implementation of {@link ProjectProperties}
* @param globalConfig the Jib global config
* @param helpfulSuggestions a plugin specific instance of {@link HelpfulSuggestions}
* @return new {@link JibBuildRunner} to execute a build
* @throws InvalidImageReferenceException if the image reference is invalid
* @throws MainClassInferenceException if a main class could not be found
* @throws InvalidAppRootException if the specific path for application root is invalid
* @throws IOException if an error occurs creating the container builder
* @throws InvalidWorkingDirectoryException if the working directory specified for the build is
* invalid
* @throws InvalidPlatformException if there exists a {@link PlatformConfiguration} in the
* specified platforms list that is missing required fields or has invalid values
* @throws InvalidContainerVolumeException if a specific container volume is invalid
* @throws IncompatibleBaseImageJavaVersionException if the base image java version cannot support
* this build
* @throws NumberFormatException if a string to number conversion operation fails
* @throws InvalidContainerizingModeException if an invalid {@link ContainerizingMode} was
* specified
* @throws InvalidFilesModificationTimeException if configured modification time could not be
* parsed
* @throws InvalidCreationTimeException if configured creation time could not be parsed
* @throws JibPluginExtensionException if an error occurred while running plugin extensions
* @throws ExtraDirectoryNotFoundException if the extra directory specified for the build is not
* found
*/
public static JibBuildRunner createJibBuildRunnerForDockerDaemonImage(RawConfiguration rawConfiguration, InferredAuthProvider inferredAuthProvider, ProjectProperties projectProperties, GlobalConfig globalConfig, HelpfulSuggestions helpfulSuggestions) throws InvalidImageReferenceException, MainClassInferenceException, InvalidAppRootException, IOException, InvalidWorkingDirectoryException, InvalidPlatformException, InvalidContainerVolumeException, IncompatibleBaseImageJavaVersionException, NumberFormatException, InvalidContainerizingModeException, InvalidFilesModificationTimeException, InvalidCreationTimeException, ExtraDirectoryNotFoundException, JibPluginExtensionException {
ImageReference targetImageReference = getGeneratedTargetDockerTag(rawConfiguration, projectProperties, helpfulSuggestions);
DockerDaemonImage targetImage = DockerDaemonImage.named(targetImageReference);
Optional<Path> dockerExecutable = rawConfiguration.getDockerExecutable();
if (dockerExecutable.isPresent()) {
targetImage.setDockerExecutable(dockerExecutable.get());
}
targetImage.setDockerEnvironment(rawConfiguration.getDockerEnvironment());
Containerizer containerizer = Containerizer.to(targetImage);
Multimaps.asMap(globalConfig.getRegistryMirrors()).forEach(containerizer::addRegistryMirrors);
JibContainerBuilder jibContainerBuilder = processCommonConfiguration(rawConfiguration, inferredAuthProvider, projectProperties, containerizer);
JibContainerBuilder updatedContainerBuilder = projectProperties.runPluginExtensions(rawConfiguration.getPluginExtensions(), jibContainerBuilder).setFormat(ImageFormat.Docker);
return JibBuildRunner.forBuildToDockerDaemon(updatedContainerBuilder, containerizer, projectProperties::log, helpfulSuggestions, targetImageReference, rawConfiguration.getToTags()).writeImageDigest(rawConfiguration.getDigestOutputPath()).writeImageId(rawConfiguration.getImageIdOutputPath()).writeImageJson(rawConfiguration.getImageJsonOutputPath());
}
use of com.google.cloud.tools.jib.api.ImageReference in project jib by GoogleContainerTools.
the class PluginConfigurationProcessor method createJibBuildRunnerForRegistryImage.
/**
* Generate a runner for image builds to registries.
*
* @param rawConfiguration the raw configuration from the plugin
* @param inferredAuthProvider the plugin specific auth provider
* @param projectProperties an plugin specific implementation of {@link ProjectProperties}
* @param globalConfig the Jib global config
* @param helpfulSuggestions a plugin specific instance of {@link HelpfulSuggestions}
* @return new {@link JibBuildRunner} to execute a build
* @throws InvalidImageReferenceException if the image reference is invalid
* @throws MainClassInferenceException if a main class could not be found
* @throws InvalidAppRootException if the specific path for application root is invalid
* @throws IOException if an error occurs creating the container builder
* @throws InvalidWorkingDirectoryException if the working directory specified for the build is
* invalid
* @throws InvalidPlatformException if there exists a {@link PlatformConfiguration} in the
* specified platforms list that is missing required fields or has invalid values
* @throws InvalidContainerVolumeException if a specific container volume is invalid
* @throws IncompatibleBaseImageJavaVersionException if the base image java version cannot support
* this build
* @throws NumberFormatException if a string to number conversion operation fails
* @throws InvalidContainerizingModeException if an invalid {@link ContainerizingMode} was
* specified
* @throws InvalidFilesModificationTimeException if configured modification time could not be
* parsed
* @throws InvalidCreationTimeException if configured creation time could not be parsed
* @throws JibPluginExtensionException if an error occurred while running plugin extensions
* @throws ExtraDirectoryNotFoundException if the extra directory specified for the build is not
* found
*/
public static JibBuildRunner createJibBuildRunnerForRegistryImage(RawConfiguration rawConfiguration, InferredAuthProvider inferredAuthProvider, ProjectProperties projectProperties, GlobalConfig globalConfig, HelpfulSuggestions helpfulSuggestions) throws InvalidImageReferenceException, MainClassInferenceException, InvalidAppRootException, IOException, InvalidWorkingDirectoryException, InvalidPlatformException, InvalidContainerVolumeException, IncompatibleBaseImageJavaVersionException, NumberFormatException, InvalidContainerizingModeException, InvalidFilesModificationTimeException, InvalidCreationTimeException, JibPluginExtensionException, ExtraDirectoryNotFoundException {
Optional<String> image = rawConfiguration.getToImage();
Preconditions.checkArgument(image.isPresent());
ImageReference targetImageReference = ImageReference.parse(image.get());
RegistryImage targetImage = RegistryImage.named(targetImageReference);
configureCredentialRetrievers(rawConfiguration, projectProperties, targetImage, targetImageReference, PropertyNames.TO_AUTH_USERNAME, PropertyNames.TO_AUTH_PASSWORD, rawConfiguration.getToAuth(), inferredAuthProvider, rawConfiguration.getToCredHelper());
boolean alwaysCacheBaseImage = Boolean.parseBoolean(rawConfiguration.getProperty(PropertyNames.ALWAYS_CACHE_BASE_IMAGE).orElse("false"));
Containerizer containerizer = Containerizer.to(targetImage).setAlwaysCacheBaseImage(alwaysCacheBaseImage);
Multimaps.asMap(globalConfig.getRegistryMirrors()).forEach(containerizer::addRegistryMirrors);
JibContainerBuilder jibContainerBuilder = processCommonConfiguration(rawConfiguration, inferredAuthProvider, projectProperties, containerizer);
JibContainerBuilder updatedContainerBuilder = projectProperties.runPluginExtensions(rawConfiguration.getPluginExtensions(), jibContainerBuilder);
return JibBuildRunner.forBuildImage(updatedContainerBuilder, containerizer, projectProperties::log, helpfulSuggestions, targetImageReference, rawConfiguration.getToTags()).writeImageDigest(rawConfiguration.getDigestOutputPath()).writeImageId(rawConfiguration.getImageIdOutputPath()).writeImageJson(rawConfiguration.getImageJsonOutputPath());
}
use of com.google.cloud.tools.jib.api.ImageReference in project jib by GoogleContainerTools.
the class PluginConfigurationProcessor method getJavaContainerBuilderWithBaseImage.
/**
* Returns a {@link JavaContainerBuilder} with the correctly parsed base image configuration.
*
* @param rawConfiguration contains the base image configuration
* @param projectProperties used for providing additional information
* @param inferredAuthProvider provides inferred auths for registry images
* @return a new {@link JavaContainerBuilder} with the configured base image
* @throws IncompatibleBaseImageJavaVersionException when the Java version in the base image is
* incompatible with the Java version of the application to be containerized
* @throws InvalidImageReferenceException if the base image configuration can't be parsed
* @throws FileNotFoundException if a credential helper can't be found
*/
@VisibleForTesting
static JavaContainerBuilder getJavaContainerBuilderWithBaseImage(RawConfiguration rawConfiguration, ProjectProperties projectProperties, InferredAuthProvider inferredAuthProvider) throws IncompatibleBaseImageJavaVersionException, InvalidImageReferenceException, FileNotFoundException {
// Use image configuration as-is if it's a local base image
Optional<String> image = rawConfiguration.getFromImage();
String baseImageConfig = image.isPresent() ? image.get() : getDefaultBaseImage(projectProperties);
if (baseImageConfig.startsWith(Jib.TAR_IMAGE_PREFIX)) {
return JavaContainerBuilder.from(baseImageConfig);
}
// Verify Java version is compatible
List<String> splits = Splitter.on("://").splitToList(baseImageConfig);
String prefixRemoved = splits.get(splits.size() - 1);
int javaVersion = projectProperties.getMajorJavaVersion();
if (isKnownJava8Image(prefixRemoved) && javaVersion > 8) {
throw new IncompatibleBaseImageJavaVersionException(8, javaVersion);
}
if (isKnownJava11Image(prefixRemoved) && javaVersion > 11) {
throw new IncompatibleBaseImageJavaVersionException(11, javaVersion);
}
if (isKnownJava17Image(prefixRemoved) && javaVersion > 17) {
throw new IncompatibleBaseImageJavaVersionException(17, javaVersion);
}
ImageReference baseImageReference = ImageReference.parse(prefixRemoved);
if (baseImageConfig.startsWith(Jib.DOCKER_DAEMON_IMAGE_PREFIX)) {
DockerDaemonImage dockerDaemonImage = DockerDaemonImage.named(baseImageReference).setDockerEnvironment(rawConfiguration.getDockerEnvironment());
Optional<Path> dockerExecutable = rawConfiguration.getDockerExecutable();
if (dockerExecutable.isPresent()) {
dockerDaemonImage.setDockerExecutable(dockerExecutable.get());
}
return JavaContainerBuilder.from(dockerDaemonImage);
}
RegistryImage baseImage = RegistryImage.named(baseImageReference);
configureCredentialRetrievers(rawConfiguration, projectProperties, baseImage, baseImageReference, PropertyNames.FROM_AUTH_USERNAME, PropertyNames.FROM_AUTH_PASSWORD, rawConfiguration.getFromAuth(), inferredAuthProvider, rawConfiguration.getFromCredHelper());
return JavaContainerBuilder.from(baseImage);
}
Aggregations