如何以编程方式使用存储在Nexus中的旧快照工件

时间:2016-08-20 00:20:18

标签: maven jenkins maven-3 pom.xml nexus

在我们的构建和部署基础架构中,我们有一个构建我们的多模块Maven项目的Jenkins作业,并且最近一直在向Nexus部署生成的工件(包括一个综合tarball)。然后另一个作业(有时由成功的构建作业触发)运行部署,它根据构建作业运行的POM从Nexus中提取所需的工件(构建作业存档POM,以便可以使用依赖:复制目标)。对于发行版,这可以正常工作,如果需要回滚方案,我们甚至可以部署早期版本。但是,这会破坏SNAPSHOT构建,因为POM不包含除工件-SNAPSHOT之外的任何版本标识符。

构建输出确实包含在构建完成后可以使用grepped的信息,以便我们可以将其用作版本。那些熟悉Maven的人会识别以下Maven输出片段:

[INFO] Uploading: http://nexus.eng.company.com/nexus/content/repositories/snapshots/com/company/application/application-dist/4.19.3-SNAPSHOT/application-dist-4.19.3-20160819.223606-7-eng.tar.gz

[INFO] Uploaded: http://nexus.eng.company.com/nexus/content/repositories/snapshots/com/company/application/application-dist/4.19.3-SNAPSHOT/application-dist-4.19.3-20160819.223606-7-eng.tar.gz (109687 KB at 413.1 KB/sec)

但是有更好的方法吗?我们特别想要允许的情况是开发人员部署早期版本(通常用于部署功能分支版本),但除非我找到一种方法来获取带有日期戳的版本标识符,否则目前是不可能的。

1 个答案:

答案 0 :(得分:2)

可能的解决方案是创建动态属性以使用classifier。在这种情况下,build-helper-maven-plugin可以提供帮助,例如以下内容:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.10</version>
    <executions>
        <execution>
            <id>regex-property</id>
            <goals>
                <goal>timestamp-property</goal>
            </goals>
            <configuration>
                <name>custom.classifier</name>
                <pattern>yyyy-MM-dd_HH-mm-ss.SSS</pattern>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.0.2</version>
    <configuration>
        <classifier>${custom.classifier}</classifier>
    </configuration>
</plugin>

上面我们正在创建一个新属性custom.classifier,并用pattern元素定义的时间戳填充它(精心设计,以便不会有空格或无效字符,因为分类器将成为最终文件名的一部分。)

然后maven-jar-plugin案例相应地设置了分类器。

然后,您可以进一步将上述行为包装在Maven profile中,以便仅为CI作业激活它。