将插件绑定在某个phase执行,推送镜像

时间:2023-03-09 08:27:15
将插件绑定在某个phase执行,推送镜像

将插件绑定在某个phase执行

需求:在执行mvn clean package 时,插件自动为构建Docker镜像。

实现:将插件的的goal绑定在某个phase即可。

phase和goal可以这样理解:maven命令格式是mvn phase:goal ,例如mvn package docker:build。那么,package和docker都是phase,build则是goal。

示例:

<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<excutions>
<excution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</excution>
</excutions>
<configuration>
<imageName>itmuch/discovery-eureka:0.0.1</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>

由配置可知,只需添加如下配置:

 		 <excutions>
<excution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</excution>
</excutions>

就可将插件绑定在package的phase上。也就是说,用户只需执行mvn package,就会自动执行mvn docker:build。

推送镜像

使用Maven插件推送一个Docker 镜像到Docker Hub.

1.修改Maven的全局配置文件settings.xml,在其中添加以下内容,配置Docker Hub的用户信息。

<server>
<id>docker-hub</id>
<username>用户名</username>
<password>密码</password>
<configuration>
<email>邮箱</email>
</configuration>
</server>

2.修改pom.xml。

<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<imageName>itmuch/discovery-eureka:0.0.1</imageName>
<baseImage>java</baseImage>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources> <!-- 与maven配置文件settings.xml中配置的server.id一致,用于推送镜像 -->
<serverId>docker-hub</serverId>
</configuration>
</plugin>
</plugins>
</build>

3.执行以下命令,添加pushImage的标签,表示推送镜像。

mvn clean package docker:build -DpushImage

也可推送镜像到私有仓库,只需要将imageName指定类似如下的形式即可:

<imageName> localhost:5000/itmuch/discovery-eureka:0.0.4</imageName>