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 内部构建号的方法。但是需要进行一些调整才能满足您的要求。

  1. 在 pom.xml
  2. 中为内部版本号定义一个 属性
<properties>
    <build.number></build.number>
</properties>

属性 应该有一个空值默认值。如果未指定内部版本号(如 Java 系统 属性),则 jar 的名称通常为 ${artifactId}-${version}.jar 例如myartifact-0.0.1-SNAPSHOT.jar

  1. 指定构建的最终名称
<build>
  <finalName>${artifactId}-${version}${build.number}</finalName>
</build>

最终名称现在将包含内部版本号作为后缀。例如:myartifact-0.0.1-SNAPSHOT-153.jar(请注意,内部版本号之前的连字符必须是系统的一部分 属性 - 请参阅下一步)

  1. 在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