【问题标题】:How can I have two dependent Jenkins builds use the same revision of the software?如何让两个依赖的 Jenkins 构建使用相同的软件版本?
【发布时间】:2014-01-31 04:21:58
【问题描述】:

我们有一个发布构建结构,看起来像这样:

U 项目(上游):

  • 是矩阵项目
  • 在多个平台上运行,为每个平台创建发布的文件。
  • 这些将颠覆修订号放入各种文件中。
  • 将工件归档回 Jenkins
  • 触发器基于项目 D

项目 D(下游):

  • 不是矩阵项目
  • 只检出顶级目录和包含发布脚本的子目录
  • 从项目 U 的成功构建中提取工件
  • 使用颠覆修订号来决定将合并结果复制到哪里。

我不知道这是否是正确构造它以解决 Jenkins 局限性的方法,但这是我们能够解决的唯一方法,因为它非常缺乏有用的文档。

不管怎样,我们遇到的问题是这样的事情发生了:

  • 18:00 触发器启动 Project U
  • Project U 签出 SVN 修订版 30,000 并构建软件
  • 18:05,一些在办公室工作的人签入了一些新代码
  • 项目 U 于 18:25 完成构建并触发项目 D
  • 项目 D 签出 SVN 修订版 30,001 并进行上传

结果是我们的 Web 服务器上的文件最终在发布过程中认为是 30,001 版本,但实际上是 30,000。

(请注意,这不仅适用于发布版本。我们也看到它用于单元测试 - 编译软件的版本和运行测试的版本可能是不同的版本,导致测试依赖于检查源目录的内容失败,因为某些源文件没有对应的编译文件。)

我尝试使用“参数化触发器”插件来传递 Subversion 修订版,但仅将其配置为传递修订版号似乎还不够,因为触发的项目没有使用它正在使用的数字通过了。我在第二个项目中找不到与此相关的任何设置,但 Jenkins 的 UI 是狗的早餐,如果有人能在其中找到任何东西,我会感到惊讶。

有谁知道如何做这种事情? 肯定我们不是世界上唯一一家试图在多个平台上发布我们的软件的公司吗?

【问题讨论】:

  • FWIW,我目前使用的解决方法是在项目D中使用单个顶级目录。所以我必须支付检查项目很多无用部分的费用,但是这样做可以避免导致“参数化触发器”不起作用的错误。

标签: svn build jenkins multiplatform


【解决方案1】:

我认为Tracking SVN Plugin 可以解决您的问题。

【讨论】:

  • 可能很有趣,担心的是它说“该项目中与跟踪项目完全匹配的任何 URL 都会发生修订跟踪。”...这让我认为它没有不适用于子 URL。
【解决方案2】:

您可以执行以下操作。

  1. 使用参数化插件并将SVN修订传递给下游项目。

  2. 在下游项目中,无需选择svn作为源代码管理工具。相反,添加第一个构建设置以将您的工作目录更新为从上游项目传递的修订。

cd $workspace

svn update -r$pameter

我为我们的一个项目做过这样的事情,而且效果很好。

如果您使用的是 clean build,而不是 svn update,您也可以使用相同的方式使用 checkout。

svn checkout url://repository/path@$parameter

svn checkout -r $parameter url://repository/path

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2019-12-27
    相关资源
    最近更新 更多