目前docker与maven的使用都是非常广泛的,所以二者结合使用,将是极大的提高效率。借助maven组件dockerfile-maven-plugin可以实现二者的结合。配置代码如下:
1,参数定义
<properties>
<dockerfile.skip>false</dockerfile.skip>
<docker.repostory>xxxxxx.tencentyun.com</docker.repostory>
<docker.repostory.user>xxxxxxxx</docker.repostory.user>
<docker.repostory.password>xxxxxxxxx</docker.repostory.password>
<docker.registry.name>demotest</docker.registry.name>
<docker.image.name>demo</docker.image.name>
</properties>
2,时间戳定义
由于maven自身的问题,无法实现带有时区的时间戳,因此需要借助其他组件实现
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>3.0.0</version>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
</execution>
</executions>
<configuration>
<name>current.time</name>
<pattern>yyyyMMdd.HHmmss</pattern>
<timeZone>GMT+8</timeZone>
</configuration>
</plugin>
我们定义了一个名称是current.time格式是yyyyMMdd.HHmmss的东八区时间戳。
3,定义docker配置
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<!-- 在build阶段创建image -->
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
<configuration>
<tag>latest</tag>
</configuration>
</execution>
<!-- 在build和package阶段创建tag -->
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<tag>${current.time}</tag>
</configuration>
</execution>
<!-- 在deploy阶段发布image到远程仓库 -->
<execution>
<id>push-image-version</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<tag>${current.time}</tag>
</configuration>
</execution>
</executions>
<configuration>
<skip>${dockerfile.skip}</skip>
<username>${docker.repostory.user}</username>
<password>${docker.repostory.password}</password>
<useProxy>false</useProxy>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<repository>${docker.repostory}/${docker.registry.name}/${docker.image.name}</repository>
<contextDirectory>${project.build.directory}/${project.name}</contextDirectory>
</configuration>
</plugin>
4,使用方式
4.1,本地创建image和tag:
mvn clean install
或者
mvn clean package
二者均可
4.2,发布image到远端仓库
mvn clean deploy
4.3,如果在maven任何阶段都不想执行docker操作可以添加参数
-Ddockerfile.skip=true
mvn clean package -Ddockerfile.skip=true
-End-
网友评论