Search in sources :

Example 1 with ImageReference

use of com.google.cloud.tools.jib.image.ImageReference in project jib by google.

the class BuildImageMojo method execute.

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
    validateParameters();
    ProjectProperties projectProperties = new ProjectProperties(project, getLog());
    if (mainClass == null) {
        mainClass = projectProperties.getMainClassFromMavenJarPlugin();
        if (mainClass == null) {
            throwMojoExecutionExceptionWithHelpMessage(new MojoFailureException("Could not find main class specified in maven-jar-plugin"), "add a `mainClass` configuration to jib-maven-plugin");
        }
    }
    SourceFilesConfiguration sourceFilesConfiguration = projectProperties.getSourceFilesConfiguration();
    // Parses 'from' into image reference.
    ImageReference baseImage = getBaseImageReference();
    // Checks Maven settings for registry credentials.
    session.getSettings().getServer(baseImage.getRegistry());
    Map<String, Authorization> registryCredentials = new HashMap<>(2);
    // Retrieves credentials for the base image registry.
    Authorization baseImageRegistryCredentials = getRegistryCredentialsFromSettings(baseImage.getRegistry());
    if (baseImageRegistryCredentials != null) {
        registryCredentials.put(baseImage.getRegistry(), baseImageRegistryCredentials);
    }
    // Retrieves credentials for the target registry.
    Authorization targetRegistryCredentials = getRegistryCredentialsFromSettings(registry);
    if (targetRegistryCredentials != null) {
        registryCredentials.put(registry, targetRegistryCredentials);
    }
    RegistryCredentials mavenSettingsCredentials = RegistryCredentials.from("Maven settings", registryCredentials);
    ImageReference targetImageReference = ImageReference.of(registry, repository, tag);
    ImageFormat imageFormatToEnum = ImageFormat.valueOf(imageFormat);
    BuildConfiguration buildConfiguration = BuildConfiguration.builder(new MavenBuildLogger(getLog())).setBaseImage(baseImage).setTargetImage(targetImageReference).setCredentialHelperNames(credHelpers).setKnownRegistryCredentials(mavenSettingsCredentials).setMainClass(mainClass).setEnableReproducibleBuilds(enableReproducibleBuilds).setJvmFlags(jvmFlags).setEnvironment(environment).setTargetFormat(imageFormatToEnum.getManifestTemplateClass()).build();
    // Uses a directory in the Maven build cache as the Jib cache.
    Path cacheDirectory = Paths.get(project.getBuild().getDirectory(), CACHE_DIRECTORY_NAME);
    if (!Files.exists(cacheDirectory)) {
        try {
            Files.createDirectory(cacheDirectory);
        } catch (IOException ex) {
            throw new MojoExecutionException("Could not create cache directory: " + cacheDirectory, ex);
        }
    }
    Caches.Initializer cachesInitializer = Caches.newInitializer(cacheDirectory);
    if (useOnlyProjectCache) {
        cachesInitializer.setBaseCacheDirectory(cacheDirectory);
    }
    getLog().info("");
    getLog().info("Pushing image as " + targetImageReference);
    getLog().info("");
    // TODO: Instead of disabling logging, have authentication credentials be provided
    // Disables annoying Apache HTTP client logging.
    System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    System.setProperty("org.apache.commons.logging.simplelog.defaultlog", "error");
    RegistryClient.setUserAgentSuffix(USER_AGENT_SUFFIX);
    buildImage(new BuildImageSteps(buildConfiguration, sourceFilesConfiguration, cachesInitializer));
    getLog().info("");
    getLog().info("Built and pushed image as " + targetImageReference);
    getLog().info("");
}
Also used : Path(java.nio.file.Path) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) HashMap(java.util.HashMap) BuildImageSteps(com.google.cloud.tools.jib.builder.BuildImageSteps) MojoFailureException(org.apache.maven.plugin.MojoFailureException) IOException(java.io.IOException) Caches(com.google.cloud.tools.jib.cache.Caches) RegistryCredentials(com.google.cloud.tools.jib.registry.credentials.RegistryCredentials) Authorization(com.google.cloud.tools.jib.http.Authorization) BuildConfiguration(com.google.cloud.tools.jib.builder.BuildConfiguration) SourceFilesConfiguration(com.google.cloud.tools.jib.builder.SourceFilesConfiguration) ImageReference(com.google.cloud.tools.jib.image.ImageReference)

Example 2 with ImageReference

use of com.google.cloud.tools.jib.image.ImageReference in project jib by google.

the class BuildImageTask method buildImage.

@TaskAction
public void buildImage() throws InvalidImageReferenceException, IOException {
    // Asserts required @Input parameters are not null.
    Preconditions.checkNotNull(from);
    Preconditions.checkNotNull(from.getImage());
    Preconditions.checkNotNull(to);
    Preconditions.checkNotNull(to.getImage());
    Preconditions.checkNotNull(jvmFlags);
    Preconditions.checkNotNull(format);
    ImageReference baseImageReference = ImageReference.parse(from.getImage());
    ImageReference targetImageReference = ImageReference.parse(to.getImage());
    ProjectProperties projectProperties = new ProjectProperties(getProject(), getLogger());
    String mainClass = this.mainClass;
    if (mainClass == null) {
        mainClass = projectProperties.getMainClassFromJarTask();
        if (mainClass == null) {
            throw new GradleException("Could not find main class specified in a 'jar' task");
        }
    }
    SourceFilesConfiguration sourceFilesConfiguration = getSourceFilesConfiguration();
    // TODO: These should be passed separately - one for base image, one for target image.
    List<String> credHelpers = new ArrayList<>();
    if (from.getCredHelper() != null) {
        credHelpers.add(from.getCredHelper());
    }
    if (to.getCredHelper() != null) {
        credHelpers.add(to.getCredHelper());
    }
    BuildConfiguration buildConfiguration = BuildConfiguration.builder(new GradleBuildLogger(getLogger())).setBaseImage(baseImageReference).setTargetImage(targetImageReference).setCredentialHelperNames(credHelpers).setMainClass(mainClass).setEnableReproducibleBuilds(reproducible).setJvmFlags(jvmFlags).setTargetFormat(format).build();
    // Uses a directory in the Gradle build cache as the Jib cache.
    Path cacheDirectory = getProject().getBuildDir().toPath().resolve(CACHE_DIRECTORY_NAME);
    if (!Files.exists(cacheDirectory)) {
        Files.createDirectory(cacheDirectory);
    }
    Caches.Initializer cachesInitializer = Caches.newInitializer(cacheDirectory);
    if (getUseOnlyProjectCache()) {
        cachesInitializer.setBaseCacheDirectory(cacheDirectory);
    }
    getLogger().lifecycle("Pushing image as " + targetImageReference);
    getLogger().lifecycle("");
    getLogger().lifecycle("");
    // TODO: Instead of disabling logging, have authentication credentials be provided
    // Disables annoying Apache HTTP client logging.
    System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
    System.setProperty("org.apache.commons.logging.simplelog.defaultlog", "error");
    // Disables Google HTTP client logging.
    Logger logger = Logger.getLogger(HttpTransport.class.getName());
    logger.setLevel(Level.OFF);
    RegistryClient.setUserAgentSuffix(USER_AGENT_SUFFIX);
    doBuildImage(new BuildImageSteps(buildConfiguration, sourceFilesConfiguration, cachesInitializer));
    getLogger().lifecycle("");
    getLogger().lifecycle("Built and pushed image as " + targetImageReference);
    getLogger().lifecycle("");
}
Also used : Path(java.nio.file.Path) BuildImageSteps(com.google.cloud.tools.jib.builder.BuildImageSteps) ArrayList(java.util.ArrayList) Caches(com.google.cloud.tools.jib.cache.Caches) Logger(java.util.logging.Logger) BuildConfiguration(com.google.cloud.tools.jib.builder.BuildConfiguration) SourceFilesConfiguration(com.google.cloud.tools.jib.builder.SourceFilesConfiguration) HttpTransport(com.google.api.client.http.HttpTransport) ImageReference(com.google.cloud.tools.jib.image.ImageReference) GradleException(org.gradle.api.GradleException) TaskAction(org.gradle.api.tasks.TaskAction)

Aggregations

BuildConfiguration (com.google.cloud.tools.jib.builder.BuildConfiguration)2 BuildImageSteps (com.google.cloud.tools.jib.builder.BuildImageSteps)2 SourceFilesConfiguration (com.google.cloud.tools.jib.builder.SourceFilesConfiguration)2 Caches (com.google.cloud.tools.jib.cache.Caches)2 ImageReference (com.google.cloud.tools.jib.image.ImageReference)2 Path (java.nio.file.Path)2 HttpTransport (com.google.api.client.http.HttpTransport)1 Authorization (com.google.cloud.tools.jib.http.Authorization)1 RegistryCredentials (com.google.cloud.tools.jib.registry.credentials.RegistryCredentials)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 Logger (java.util.logging.Logger)1 MojoExecutionException (org.apache.maven.plugin.MojoExecutionException)1 MojoFailureException (org.apache.maven.plugin.MojoFailureException)1 GradleException (org.gradle.api.GradleException)1 TaskAction (org.gradle.api.tasks.TaskAction)1