Search in sources :

Example 11 with RegistryImage

use of com.google.cloud.tools.jib.api.RegistryImage 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());
}
Also used : ImageReference(com.google.cloud.tools.jib.api.ImageReference) Containerizer(com.google.cloud.tools.jib.api.Containerizer) JibContainerBuilder(com.google.cloud.tools.jib.api.JibContainerBuilder) RegistryImage(com.google.cloud.tools.jib.api.RegistryImage)

Example 12 with RegistryImage

use of com.google.cloud.tools.jib.api.RegistryImage 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);
}
Also used : Path(java.nio.file.Path) AbsoluteUnixPath(com.google.cloud.tools.jib.api.buildplan.AbsoluteUnixPath) ImageReference(com.google.cloud.tools.jib.api.ImageReference) DockerDaemonImage(com.google.cloud.tools.jib.api.DockerDaemonImage) RegistryImage(com.google.cloud.tools.jib.api.RegistryImage) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 13 with RegistryImage

use of com.google.cloud.tools.jib.api.RegistryImage in project quarkus by quarkusio.

the class JibProcessor method createContainerizer.

private Containerizer createContainerizer(ContainerImageConfig containerImageConfig, JibConfig jibConfig, ContainerImageInfoBuildItem containerImage, boolean pushRequested) {
    Containerizer containerizer;
    ImageReference imageReference = ImageReference.of(containerImage.getRegistry().orElse(null), containerImage.getRepository(), containerImage.getTag());
    if (pushRequested || containerImageConfig.isPushExplicitlyEnabled()) {
        if (!containerImageConfig.registry.isPresent()) {
            log.info("No container image registry was set, so 'docker.io' will be used");
        }
        RegistryImage registryImage = toRegistryImage(imageReference, containerImageConfig.username, containerImageConfig.password);
        containerizer = Containerizer.to(registryImage);
    } else {
        DockerDaemonImage dockerDaemonImage = DockerDaemonImage.named(imageReference);
        Optional<String> dockerConfigExecutableName = ConfigProvider.getConfig().getOptionalValue("quarkus.docker.executable-name", String.class);
        Optional<String> jibConfigExecutableName = jibConfig.dockerExecutableName;
        if (jibConfigExecutableName.isPresent()) {
            dockerDaemonImage.setDockerExecutable(Paths.get(jibConfigExecutableName.get()));
        } else if (dockerConfigExecutableName.isPresent()) {
            dockerDaemonImage.setDockerExecutable(Paths.get(dockerConfigExecutableName.get()));
        } else {
            // detect the container runtime instead of falling back to 'docker' as the default
            ContainerRuntimeUtil.ContainerRuntime detectedContainerRuntime = ContainerRuntimeUtil.detectContainerRuntime();
            log.infof("Using %s to run the native image builder", detectedContainerRuntime.getExecutableName());
            dockerDaemonImage.setDockerExecutable(Paths.get(detectedContainerRuntime.getExecutableName()));
        }
        containerizer = Containerizer.to(dockerDaemonImage);
    }
    containerizer.setToolName("Quarkus");
    containerizer.setToolVersion(Version.getVersion());
    containerizer.addEventHandler(LogEvent.class, (e) -> {
        if (!e.getMessage().isEmpty()) {
            log.log(toJBossLoggingLevel(e.getLevel()), e.getMessage());
        }
    });
    containerizer.setAllowInsecureRegistries(containerImageConfig.insecure);
    containerizer.setAlwaysCacheBaseImage(jibConfig.alwaysCacheBaseImage);
    containerizer.setOfflineMode(jibConfig.offlineMode);
    return containerizer;
}
Also used : ImageReference(com.google.cloud.tools.jib.api.ImageReference) Containerizer(com.google.cloud.tools.jib.api.Containerizer) DockerDaemonImage(com.google.cloud.tools.jib.api.DockerDaemonImage) RegistryImage(com.google.cloud.tools.jib.api.RegistryImage)

Aggregations

RegistryImage (com.google.cloud.tools.jib.api.RegistryImage)13 ImageReference (com.google.cloud.tools.jib.api.ImageReference)10 DockerDaemonImage (com.google.cloud.tools.jib.api.DockerDaemonImage)7 Containerizer (com.google.cloud.tools.jib.api.Containerizer)5 InvalidImageReferenceException (com.google.cloud.tools.jib.api.InvalidImageReferenceException)5 CredentialRetrieverFactory (com.google.cloud.tools.jib.frontend.CredentialRetrieverFactory)5 DOCKER_DAEMON_IMAGE_PREFIX (com.google.cloud.tools.jib.api.Jib.DOCKER_DAEMON_IMAGE_PREFIX)4 REGISTRY_IMAGE_PREFIX (com.google.cloud.tools.jib.api.Jib.REGISTRY_IMAGE_PREFIX)4 TAR_IMAGE_PREFIX (com.google.cloud.tools.jib.api.Jib.TAR_IMAGE_PREFIX)4 JibContainerBuilder (com.google.cloud.tools.jib.api.JibContainerBuilder)4 TarImage (com.google.cloud.tools.jib.api.TarImage)4 DefaultCredentialRetrievers (com.google.cloud.tools.jib.plugins.common.DefaultCredentialRetrievers)4 ConsoleLogger (com.google.cloud.tools.jib.plugins.common.logging.ConsoleLogger)4 FileNotFoundException (java.io.FileNotFoundException)4 Paths (java.nio.file.Paths)4 LogEvent (com.google.cloud.tools.jib.api.LogEvent)3 ProgressEvent (com.google.cloud.tools.jib.event.events.ProgressEvent)3 ProgressEventHandler (com.google.cloud.tools.jib.event.progress.ProgressEventHandler)3 Jib (com.google.cloud.tools.jib.api.Jib)2 AbsoluteUnixPath (com.google.cloud.tools.jib.api.buildplan.AbsoluteUnixPath)2