1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.micronaut.build;
17
18 import com.github.dockerjava.api.command.PushImageCmd;
19 import com.github.dockerjava.api.model.AuthConfig;
20 import com.google.cloud.tools.jib.api.Credential;
21 import com.google.cloud.tools.jib.maven.MavenProjectProperties;
22 import io.micronaut.build.services.ApplicationConfigurationService;
23 import io.micronaut.build.services.DockerService;
24 import io.micronaut.build.services.JibConfigurationService;
25 import org.apache.maven.plugin.MojoExecutionException;
26 import org.apache.maven.plugin.MojoFailureException;
27 import org.apache.maven.plugins.annotations.Mojo;
28 import org.apache.maven.project.MavenProject;
29 import org.testcontainers.utility.DockerImageName;
30 import org.testcontainers.utility.RegistryAuthLocator;
31
32 import javax.inject.Inject;
33 import java.util.Set;
34
35
36
37
38
39
40
41
42
43
44
45 @Mojo(name = "docker-push")
46 public class DockerPushMojo extends AbstractDockerMojo {
47
48 @Inject
49 public DockerPushMojo(MavenProject mavenProject, JibConfigurationService jibConfigurationService,
50 ApplicationConfigurationService applicationConfigurationService, DockerService dockerService) {
51 super(mavenProject, jibConfigurationService, applicationConfigurationService, dockerService);
52 }
53
54 @Override
55 public void execute() throws MojoExecutionException, MojoFailureException {
56 Packaging packaging = Packaging.of(mavenProject.getPackaging());
57 if (packaging == Packaging.DOCKER || packaging == Packaging.DOCKER_NATIVE || packaging == Packaging.DOCKER_CRAC) {
58 Set<String> images = getTags();
59
60
61
62
63 if (jibConfigurationService.getToImage().isPresent()) {
64 for (String taggedImage : images) {
65 getLog().info("Pushing image: " + taggedImage);
66 try (PushImageCmd pushImageCmd = dockerService.pushImageCmd(taggedImage)) {
67 AuthConfig defaultAuthConfig = new AuthConfig();
68 if (jibConfigurationService.getCredentials().isPresent()) {
69 Credential credential = jibConfigurationService.getCredentials().get();
70 defaultAuthConfig
71 .withUsername(credential.getUsername())
72 .withPassword(credential.getPassword());
73 }
74 RegistryAuthLocator registryAuthLocator = RegistryAuthLocator.instance();
75 DockerImageName dockerImageName = DockerImageName.parse(taggedImage);
76 AuthConfig authConfig = registryAuthLocator.lookupAuthConfig(dockerImageName, defaultAuthConfig);
77
78 pushImageCmd
79 .withAuthConfig(authConfig)
80 .start()
81 .awaitCompletion();
82 } catch (InterruptedException e) {
83 Thread.currentThread().interrupt();
84 } catch (Exception e) {
85 throw new MojoExecutionException(e.getMessage(), e);
86 }
87 }
88 } else {
89 throw new MojoFailureException("The plugin " + MavenProjectProperties.PLUGIN_KEY + " is misconfigured. Missing <to> tag");
90 }
91 } else {
92 throw new MojoFailureException("The <packaging> must be set to either [" + Packaging.DOCKER.id() + "] or [" + Packaging.DOCKER_NATIVE.id() + "]");
93 }
94 }
95 }