我目前正在为我的应用程序开发基于微服务的架构。我有一个 maven 多模块项目,它有很多服务,所以我可以使用 maven deploy 命令和maven docker plugin轻松地将它们部署到 docker hub 。
尽管如此,泊坞窗图像标签仍基于项目版本号,而我希望将它们标记为每个存储库的最后更改的修订号。目前,我正在尝试使用buildnumber-maven-plugin将此字段添加为清单条目:
假设这是我的多模块项目:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
...
<modules>
<module>module-a</module>
<module>module-b</module>
</modules>
...
</project>
module-a 的模型是:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
...
<scm>
<connection>scm:svn:http://myrepo.com/svn/application/module-a</connection>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>true</doUpdate>
<useLastCommittedRevision>true</useLastCommittedRevision>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<SCM-Revision>${buildNumber}</SCM-Revision>
</manifestEntries>
</archive>
</configuration>
</plugin>
....
</plugins>
</build>
<dependencies>
...
</dependencies>
</project>
问题是 {buildNumber} 评估为我的工作副本号,它指的是对存储库而不是位置的最后一次提交scm:svn:http://myrepo.com/svn/application/module-a
。为了更好地解释它,当我显示来自 tortoise 的 module-a 的属性时,我得到了这个:
我想要的是检索 3248,它指的是对模块 a 所做的最后一次真正更改,而不是 3257(工作副本),这是我从插件中得到的。这样,docker 插件就会知道它是否是不同的图像标签,并且只有在对 repo 中的模块进行了更改时才推送它。