有什么方法可以在Jenkins作业中指定svn外部修订版吗?

时间:2015-05-27 02:26:39

标签: svn jenkins svn-externals

假设我有这样的svn结构:

svn://myhost/repository_main
svn://myhost/repository_ext

这两个存储库的修订号是隔离

现在我在svn:externals上设置了svn://myhost/repository_main/foo

svn://myhost/repository_main/foo --> svn://myhost/repository_ext/bar

然后在Jenkins我有一份使用svn://myhost/repository_main的工作,我可以指定要更新的修订号:

svn://myhost/repository_main@REVISION

当Jenkins要更新版本/repository_main/foo的{​​{1}}时,它始终会更新为REVISION的{​​{1}}修订版。

有什么方法我不仅可以指定HEAD的修订版,还可以指定repository_ext/bar的修订版。

1 个答案:

答案 0 :(得分:2)

externals机制使用它自己指定的修订版。这与詹金斯无关。即使没有Jenkins(通过浏览器或您的SVN客户端),如果您尝试使用指定修订版的repository_main结帐,HEADrepository_ext

externals是SVN属性。它指定了两件事:

  1. 远程(外部)位置
  2. 该位置的修订
  3. 如果您将该属性配置为远程HEAD,则它始终为HEAD远程位置,即使您转到main的上一版本也是如此。可以将其视为具有值的本地文件。如果该文件在remote@HEAD修订版main处的值为100且自那时起未发生更改,那么当您处于main修订版200时,该文件的值仍为remote@HEAD。当您在修订版main转到199时,该文件仍指向remote@HEAD

    您的另一个选择是将external锁定到特定版本,即remote@123,但是始终将再次处于该ext版本无论main修订版。

    如果main中的代码修订版与相应的ext修订版之间存在硬依赖关系,那么您的externals属性不应指向远程HEAD ,但在指定的修订版。您需要一些过程来使用最新的必需修订版更新属性。 如果您这样做,则external属性可能会remote@123位于main修订版100,然后remote@456位于main修订版150 }然后remote@789 main修订版200

    仅在这种情况下,指定main版本会影响所提取的外部存储库的修订。

    <强>替代:
    作为一个完整的解决方法(上面描述的是SVN希望您如何使用它),您可以使用Jenkins参数进行&#34;外部修订&#34;。然后在SCM步骤中,告诉Jenkins忽略外部。然后在构建步骤中,手动解析externals属性的值,找出远程位置,并使用您在参数中指定的修订从该位置手动签出。