【问题标题】:Is there an Ant task which can fetch an artifact from Hudson/Jenkins?是否有可以从 Hudson/Jenkins 获取工件的 Ant 任务?
【发布时间】:2011-09-15 13:35:37
【问题描述】:

我已经手动构建了我的项目的构建系统(主要是在 Python + Hudson 中)。我需要经常做的一件事是从上游的 Hudson / Jenkins 获取工件。

这些工件几乎可以是任何东西 - 例如,一个包含要处理的业务数据的 zip 文件,或者甚至是一个包含大量 Python 代码且必须进行测试的鸡蛋。几乎我们系统中的每个重要作业都依赖于其他 Hudson 作业生成的工件。

我的经理建议构建系统的下一次迭代应该用 Ant 替换我的一些手动组件。下一次迭代的目的是降低我们系统的复杂性,并使它们与其他主要使用 Java 和 Ant(以及很少使用 Python)的团队的工作保持一致。

我个人也很想找个借口来学习 Ant。这似乎是一个非常有用的工具。

因此,为了不重新发明轮子,我肯定需要一个 Ant 任务,它可以从特定的 Hudson 构建中获取工件。这样的事情存在吗。如果它不存在,是否有接近我可以定制的要求的东西?我宁愿不重新发明轮子。


更新1:我们非常喜欢 100% 免费的开源工具。团队中的每个人都对 Ant 感到非常满意,但是 Maven 是团队试图摆脱的东西。

【问题讨论】:

标签: java python ant hudson jenkins


【解决方案1】:

正确的解决方案是将来自 Hudson/Jenkins 的工件发布到工件管理器,例如 NexusArtifactory,然后使用 IvyGradle 之类的东西拉取工件版本。

【讨论】:

  • 是否有一个 Ant 任务可以直接从 Artifactory 获取?为了使事情变得更复杂,有时我对工件的特定版本感兴趣,例如单个历史日期的业务数据(而不是最新的业务数据)。
  • 是的,您可以将 ivy 与 ant 集成,这将让您指向一个 nexus/artifactory 服务器并拉取依赖项。理想情况下,您将“发布”应用程序的版本以及最新的 (SNAPSHOT),常春藤会让您指定。
  • Ivy 是一个 apache 产品,所以在 ant 中使用的文档非常好。 ant.apache.org/ivy/history/2.2.0/ant.html
【解决方案2】:

如果您必须自己获取依赖项,您可以使用get 任务。示例:

<get src="http://jenkins/job/project-name/lastSuccessfulBuild/artifact/foo.jar"
     dest="/path/to/local/file"/>

不过,我同意 Stefan - 依赖管理最好通过他的回答中提到的工具来完成,而不是使用 Ant 手动将它们拉下来。

【讨论】:

  • 我正在考虑的一种方法是自定义 Ant get 任务。 Hudson 获取任务将指定 Hudson 基本 URL 和一些用于获取工件的附加条件。
  • 我当前的系统可以从作业中获取最新的工件,但是它也可以执行诸如获取与文件规范匹配的最新工件之类的事情,甚至可以获取在特定历史上产生的一些工件日期。我们使用 Hudson 作为通用批处理运行环境。
  • 好吧,你总是可以使用
【解决方案3】:

如果您刚刚开始学习 ANT,那么我建议您改为学习 gradle,它已经集成了依赖项部分并且更易于使用。此外,如果您需要特定的 ANT 任务,您可以简单地从 gradle 调用它,甚至可以导入整个 ant 脚本。

否则我同意 Stefan Kendall 的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2023-03-08
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2019-04-05
    相关资源
    最近更新 更多