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

How to programmatically use older snapshot artifacts stored in Nexus

在我们的构建和部署基础设施中,我们有一个 Jenkins 作业来构建我们的多模块 Maven 项目,并且最近一直在将生成的工件(包括综合 tarball)部署到 Nexus。然后另一个作业(有时由成功的构建作业触发)运行部署,它根据构建作业 运行 的 POM 从 Nexus 中提取所需的工件(构建作业将 POM 存档,以便 tarball 可以是通过使用 dependency:copy 目标检索)。对于发布,这工作正常,如果需要回滚场景,我们甚至可以部署早期版本。然而,这对于 SNAPSHOT 构建来说是错误的,因为 POM 不包含任何版本标识符,除了工件是 -SNAPSHOT.

构建输出确实包含构建完成后可以 grep 的信息,因此我们可以将其用作版本。熟悉 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)

但是有没有更好的办法呢?我们特别尝试允许的情况是让开发人员部署早期版本(通常部署功能 b运行ch 版本)但目前这是不可能的,除非我找到一种方法来获取带有日期戳的版本标识符。

一个可能的解决方案是创建动态 属性 以使用 classifier. The 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 个作业激活它。