jenkins maven 在构建后更改 jar 文件名
jenkins maven to change jar file name after build
我的 jars 是通过 ssh 远程安装的,重要的是我知道安装了哪个版本。这不是通过我当前在 pom.xml 中使用的版本号来完成的,因为这个数字是手动更新的。
我想做什么,却找不到一个像样的插件或一个足够明确的插件来告诉我。
Jenkins 应该在 pom 文件中构建 rev 一个内部版本号(例如 1.0.3. 或 1.0.3- 或 1.0.3_ 或者只是一个称为内部版本号的附加属性)最好将此内部版本号作为 jar 名称的一部分以便于区分等)
有什么想法吗?
本文post描述了一种在 Maven 项目中使用 Jenkins 内部构建号的方法。但是需要进行一些调整才能满足您的要求。
- 在 pom.xml
中为内部版本号定义一个 属性
<properties>
<build.number></build.number>
</properties>
属性 应该有一个空值默认值。如果未指定内部版本号(如 Java 系统 属性),则 jar 的名称通常为 ${artifactId}-${version}.jar 例如myartifact-0.0.1-SNAPSHOT.jar
- 指定构建的最终名称
<build>
<finalName>${artifactId}-${version}${build.number}</finalName>
</build>
最终名称现在将包含内部版本号作为后缀。例如:myartifact-0.0.1-SNAPSHOT-153.jar(请注意,内部版本号之前的连字符必须是系统的一部分 属性 - 请参阅下一步)
- 在Maven命令中使用Jenkins environment variable设置系统属性build.number
mvn clean install -Dbuild.number=-${BUILD_NUMBER}
请注意,内部版本号前的连字符!
从 Maven 3.2.1 you can define properties in your version things like this: ${revision}
, ${changelist}
, and ${sha1}
开始。
<groupId>com.soebes.examples.j2ee</groupId>
<artifactId>parent</artifactId>
<version>1.0.4-${revision}-SNAPSHOT</version>
这是一种解决方案。
您还可以将所有需要的信息放入一个 MANIFEST.MF 文件中,这样您就可以始终准确地说出安装了哪个版本。在那里,您可以选择 svn 修订号或 git sha1 以及补充内容,例如 CI 解决方案的内部版本号。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
<revision>${svn.revision}</revision>
<build-number>${BUILD_NUMBER}</build-number>
<build-id>${BUILD_ID}</build-id>
<build-time>${maven.build.timestamp}</build-time>
</manifestEntries>
</archive>
</configuration>
</plugin>
尽管如此,Maven 并未设计有此功能,因为不应考虑 VCS 提交的每个构建,因为构建到发布的稳定性。但是有一个解决方法是使用插件。我不会建议使用内部版本号进行版本构建,而是将这种做法用于发布。
在 POM 文件中添加:
第一步:配置SCM如下
'<scm>
<connection>scm:git/svn:repositary location</connection>
<url>similar</url>
</scm>
--
--
<build>
--
--
<plugins>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.9.2</version>
<configuration>
<connectionType>connection</connectionType>
</configuration>
</plugin>'
**第 2 步:使用 BuildNumber 插件 **
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<format>{0,date,yyyy-MM-dd_HH-MM}</format>
<items>
<item>timestamp</item>
</items>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
第 3 步:
<finalName>webapp-demo-${buildNumber}</finalName>
${buildNumber} 可以是时间戳或 changeset/revision。这完全取决于您的需要。 Tutorial
我的 jars 是通过 ssh 远程安装的,重要的是我知道安装了哪个版本。这不是通过我当前在 pom.xml 中使用的版本号来完成的,因为这个数字是手动更新的。 我想做什么,却找不到一个像样的插件或一个足够明确的插件来告诉我。 Jenkins 应该在 pom 文件中构建 rev 一个内部版本号(例如 1.0.3. 或 1.0.3- 或 1.0.3_ 或者只是一个称为内部版本号的附加属性)最好将此内部版本号作为 jar 名称的一部分以便于区分等) 有什么想法吗?
本文post描述了一种在 Maven 项目中使用 Jenkins 内部构建号的方法。但是需要进行一些调整才能满足您的要求。
- 在 pom.xml 中为内部版本号定义一个 属性
<properties>
<build.number></build.number>
</properties>
属性 应该有一个空值默认值。如果未指定内部版本号(如 Java 系统 属性),则 jar 的名称通常为 ${artifactId}-${version}.jar 例如myartifact-0.0.1-SNAPSHOT.jar
- 指定构建的最终名称
<build>
<finalName>${artifactId}-${version}${build.number}</finalName>
</build>
最终名称现在将包含内部版本号作为后缀。例如:myartifact-0.0.1-SNAPSHOT-153.jar(请注意,内部版本号之前的连字符必须是系统的一部分 属性 - 请参阅下一步)
- 在Maven命令中使用Jenkins environment variable设置系统属性build.number
mvn clean install -Dbuild.number=-${BUILD_NUMBER}
请注意,内部版本号前的连字符!
从 Maven 3.2.1 you can define properties in your version things like this: ${revision}
, ${changelist}
, and ${sha1}
开始。
<groupId>com.soebes.examples.j2ee</groupId>
<artifactId>parent</artifactId>
<version>1.0.4-${revision}-SNAPSHOT</version>
这是一种解决方案。
您还可以将所有需要的信息放入一个 MANIFEST.MF 文件中,这样您就可以始终准确地说出安装了哪个版本。在那里,您可以选择 svn 修订号或 git sha1 以及补充内容,例如 CI 解决方案的内部版本号。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>${maven-jar-plugin.version}</version>
<configuration>
<archive>
<addMavenDescriptor>true</addMavenDescriptor>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
<manifestEntries>
<artifactId>${project.artifactId}</artifactId>
<groupId>${project.groupId}</groupId>
<version>${project.version}</version>
<revision>${svn.revision}</revision>
<build-number>${BUILD_NUMBER}</build-number>
<build-id>${BUILD_ID}</build-id>
<build-time>${maven.build.timestamp}</build-time>
</manifestEntries>
</archive>
</configuration>
</plugin>
尽管如此,Maven 并未设计有此功能,因为不应考虑 VCS 提交的每个构建,因为构建到发布的稳定性。但是有一个解决方法是使用插件。我不会建议使用内部版本号进行版本构建,而是将这种做法用于发布。
在 POM 文件中添加:
第一步:配置SCM如下
'<scm>
<connection>scm:git/svn:repositary location</connection>
<url>similar</url>
</scm>
--
--
<build>
--
--
<plugins>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.9.2</version>
<configuration>
<connectionType>connection</connectionType>
</configuration>
</plugin>'
**第 2 步:使用 BuildNumber 插件 **
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
<configuration>
<format>{0,date,yyyy-MM-dd_HH-MM}</format>
<items>
<item>timestamp</item>
</items>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
第 3 步:
<finalName>webapp-demo-${buildNumber}</finalName>
${buildNumber} 可以是时间戳或 changeset/revision。这完全取决于您的需要。 Tutorial