【问题标题】:Jenkins - detect artifact version changeJenkins - 检测工件版本更改
【发布时间】:2016-10-15 00:44:11
【问题描述】:

我有一个简单的 Maven 项目,它必须生成工件,例如一些神器 我在 Jenkins 也有一份工作,可以将简单的 maven 部署到我们的内部 Nexus 存储库。这是 Jenkins 在作业的“Maven 目标和选项”字段中设置的值:

clean source:jar deploy

假设我的 maven 模块的版本是 1.0:

<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>
    <groupId>some.group</groupId>
    <artifactId>some-artifact</artifactId>
    <version>1.0</version>
</project> 

现在,我想要实现的是检测 SCM 中的工件版本已更改,并在每次更改版本号时构建此作业,例如设置为 1.1 后:

<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>
        <groupId>some.group</groupId>
        <artifactId>some-artifact</artifactId>
        <version>1.1</version>
</project>

最终目标是尽快在 Nexus 上部署最新版本的some-artifact

是否有任何配置或 Jenkins 插件允许此类检测和作业触发?

【问题讨论】:

  • 为什么调用source:jar 集成到您的pom 中并只执行mvn clean deploy ...您可以将jenkins 配置为在SCM 更改时触发...这是处理此类事情的默认方式..
  • source:jar 没那么重要,关键是触发作业。如果我在 SCM 的每次更改时触发它,部署目标将失败,因为版本与前一个相同(失败实际上是可以的,但目前我们没有一些“聪明”的版本管理)。

标签: maven jenkins deployment version nexus


【解决方案1】:

我不知道它是否有帮助,有几个插件集成了 maven 和 Jenkins,所以也许其中一个会有一个 build int 功能来完成你的需要......

顺便说一句,在没有特定插件的情况下这样做有很多方法..您可以使用 ${POM_VERSION} 变量,它是与

一起引入的

https://issues.jenkins-ci.org/browse/JENKINS-18272

然后将其与上一个、上一个修订或历史等进行比较...这样您就可以在版本已更改的情况下运行作业。

您也可以将此参数与参数化触发器插件结合使用:

https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin

或者您可以使用 SVN 挂钩来完成此操作,例如如果版本已更改触发 Jenkins 作业,可能有很多方法可以手动执行此操作...最后一个选项非常糟糕!但它有效..

【讨论】:

  • "然后将其与上一个、上一个修订版或历史等进行比较...这样您就可以在版本已更改的情况下运行作业。" i> - 我应该如何以及在哪里将 ${POM_VERSION} 与以前的版本进行比较?
  • 你可以获得最新版本,检查一下,使用相同的属性来获得 pom 版本并比较它们......这是执行此操作的简单方法......听起来很奇怪吗?不是我..但我继续告诉你,也许有一些插件这样做......我只是向你建议一种手动完成的方法......它只是在提交 pom 时检查版本,如果版本改变了你触发构建..如果没有,你什么都不做..你知道你可以只在pom上合并更改,所以第一个检查版本的工作将由任何pom提交触发..而不是比较你得到你想要什么
【解决方案2】:

让我们尝试以标准方式“user2310395”...

你如何释放你的神器? Maven 发布插件还是什么?

我问这个是因为我认为标准的“工作流程”应该如下所示:

  1. 使用 maven 发布插件将工件 (1.00-SNAPSHOT) 发布到 (1.00)。现在您知道,这只是调用 Maven 目标,那么为什么不使用 Jenkins 作业来完成此任务呢?如果需要,您有插件可以帮助您,例如:Jenkins Release 插件
  2. 发布作业运行后,您将不再需要任何其他作业, 因为 Maven 发布插件本身会处理新的 将工件发布到 Nexus 标记存储库中。..

那么我错过了什么,你为什么不能按照标准的工作流程?

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多