Svn 如何让两个依赖的Jenkins版本使用相同版本的软件?

Svn 如何让两个依赖的Jenkins版本使用相同版本的软件?,svn,build,jenkins,multiplatform,Svn,Build,Jenkins,Multiplatform,我们有一个发布构建结构,它看起来像这样: 项目U上游: 这是一个矩阵项目 在多个平台上运行,为每个平台创建已发布的文件。 这些文件将subversion版本号放在各种文件中。 将文物归档回詹金斯 触发器构建在项目D上 项目D下游: 不是矩阵项目 只签出顶级目录和包含发布脚本的子目录 从项目U的成功构建中提取工件 使用subversion修订号决定将合并结果复制到何处。 我不知道这是不是一种正确的方法来构建它,以绕过Jenkins的局限性,但这是我们能够在大量缺乏有用文档的情况下找到它的唯一方法

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

项目U上游:

这是一个矩阵项目 在多个平台上运行,为每个平台创建已发布的文件。 这些文件将subversion版本号放在各种文件中。 将文物归档回詹金斯 触发器构建在项目D上 项目D下游:

不是矩阵项目 只签出顶级目录和包含发布脚本的子目录 从项目U的成功构建中提取工件 使用subversion修订号决定将合并结果复制到何处。 我不知道这是不是一种正确的方法来构建它,以绕过Jenkins的局限性,但这是我们能够在大量缺乏有用文档的情况下找到它的唯一方法

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

18:00触发器启动项目U Project U签出SVN版本30000并构建软件 18点05分,一个在办公室外工作的人输入了一些新代码 项目U在18:25完成建筑,并触发项目D 项目D检查SVN版本30001并进行上传 结果是我们的web服务器上的文件最终被发布过程认为是30001版,但实际上是30000版

请注意,这不仅仅是为了发布版本。对于单元测试,我们也看到了它——编译软件的构建和运行测试的构建可以是不同的版本,导致依赖于检查源目录内容的测试失败,因为一些源文件没有相应的编译文件

我尝试使用参数化触发器插件来传递Subversion版本,但是仅仅配置它来传递版本号似乎是不够的,因为触发的项目没有使用它正在传递的版本号。我找不到与此相关的第二个项目的任何设置,但Jenkins的UI是一个非常简单的东西,如果有人能在其中找到任何东西,我会感到惊讶


有人知道怎么做这种事吗?当然,我们不是世界上唯一一家尝试在多个平台上发布我们软件的公司?

您可以做如下事情

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

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

cd$工作区

svn更新-r$pameter

我已经为我们的一个项目这样做了,它工作得很好

如果您使用的是clean build,而不是svn update,那么同样可以使用checkout

svn校验url://repository/path@$parameter


svn签出-r$参数url://repository/path

您可以执行以下操作

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

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

cd$工作区

svn更新-r$pameter

我已经为我们的一个项目这样做了,它工作得很好

如果您使用的是clean build,而不是svn update,那么同样可以使用checkout

svn校验url://repository/path@$parameter


svn签出-r$参数url://repository/path

我认为修订版可能会解决您的问题。

我认为修订版可能会解决您的问题。

潜在的有趣之处在于,修订版跟踪会针对此项目中与跟踪的项目完全匹配的任何URL进行。。。。这让我觉得它对子URL不起作用。可能有意思的是,担心的是,它会对该项目中与跟踪项目完全匹配的任何URL进行修订跟踪。。。。这让我觉得它不适用于sub-url.FWIW,我目前使用的解决方法是在项目D中使用一个顶级目录。因此,我必须支付检查项目中许多无用部分的费用,但通过这样做,它避免了导致参数化触发器不起作用的错误。FWIW,我目前使用的解决方法是在项目D中使用一个顶级目录。因此,我必须支付检查项目中许多无用部分的费用,但通过这样做,它避免了使参数化触发器无法工作的错误。