假设我有这样的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
的修订版。
答案 0 :(得分:2)
externals
机制使用它自己指定的修订版。这与詹金斯无关。即使没有Jenkins(通过浏览器或您的SVN客户端),如果您尝试使用指定修订版的repository_main
结帐,HEAD
将repository_ext
externals
是SVN属性。它指定了两件事:
如果您将该属性配置为远程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属性的值,找出远程位置,并使用您在参数中指定的修订从该位置手动签出。