有什么方法可以在 Jenkins 作业中指定外部的 svn 修订版?
Any way to specify the svn revision of externals in a Jenkins job?
假设我有这样的svn结构:
svn://myhost/repository_main
svn://myhost/repository_ext
这两个版本库的修订号是孤立的.
现在我在 svn://myhost/repository_main/foo
上设置了一个 svn:externals
:
svn://myhost/repository_main/foo --> svn://myhost/repository_ext/bar
然后在 Jenkins 中我有一份使用 svn://myhost/repository_main
的工作,我可以指定要更新的修订号,如:
svn://myhost/repository_main@REVISION
当 Jenkins 将更新 /repository_main/foo
修订版 REVISION
时,它总是更新到 repository_ext/bar
的 HEAD
修订版。
有什么方法可以让我不仅可以指定 main
的修订版,还可以指定 ext
的修订版?
externals
机制使用它自己指定的修订版。这与詹金斯无关。即使没有 Jenkins(通过浏览器或您的 SVN 客户端),如果您尝试从具有指定修订版的 repository_main
中检出,它将需要 HEAD
for repository_ext
externals
是一个 SVN 属性。它指定了两件事:
- 远程(外部)位置
- 那个位置的修订
如果您将 属性 配置为远程 HEAD
,它将始终是远程位置的 HEAD
,即使您转到 main
的先前版本也是如此。将其视为具有值的本地文件。如果文件在 main
修订版 100
中具有值 remote@HEAD
并且此后没有更改,当您处于 main
修订版 200
时,值该文件仍然是 remote@HEAD
。当您转到 main
修订版 199
时,该文件仍指向 remote@HEAD
您的另一种选择是将 external
锁定到特定修订版,即 remote@123
,但随后它将 始终 处于 [=29] =] 修订版,同样与 main
修订版无关。
如果您在 main
中的代码修订与适当的 ext
修订之间存在硬依赖关系,那么您的 externals
属性 不应指向 HEAD
的远程,但在指定的版本。您将需要一些过程来使 属性 更新为最新的所需修订。
如果你这样做,你的 external
属性 可能 remote@123
在 main
修订版 100
,然后 remote@456
在 main
修订版150
然后 remote@789
在 main
修订 200
.
只有在这种情况下,指定 main
修订才会影响获取的外部存储库的修订。
选择:
作为一个完整的解决方法(上面描述的是 SVN 希望您使用它的方式),您可以为 "externals revision" 使用 Jenkins 参数。然后在 SCM 步骤中,告诉 Jenkins 忽略外部因素。然后在构建步骤中,手动解析外部值 属性,找出远程位置,并使用您在参数中指定的修订从该位置手动检出。
假设我有这样的svn结构:
svn://myhost/repository_main
svn://myhost/repository_ext
这两个版本库的修订号是孤立的.
现在我在 svn://myhost/repository_main/foo
上设置了一个 svn:externals
:
svn://myhost/repository_main/foo --> svn://myhost/repository_ext/bar
然后在 Jenkins 中我有一份使用 svn://myhost/repository_main
的工作,我可以指定要更新的修订号,如:
svn://myhost/repository_main@REVISION
当 Jenkins 将更新 /repository_main/foo
修订版 REVISION
时,它总是更新到 repository_ext/bar
的 HEAD
修订版。
有什么方法可以让我不仅可以指定 main
的修订版,还可以指定 ext
的修订版?
externals
机制使用它自己指定的修订版。这与詹金斯无关。即使没有 Jenkins(通过浏览器或您的 SVN 客户端),如果您尝试从具有指定修订版的 repository_main
中检出,它将需要 HEAD
for repository_ext
externals
是一个 SVN 属性。它指定了两件事:
- 远程(外部)位置
- 那个位置的修订
如果您将 属性 配置为远程 HEAD
,它将始终是远程位置的 HEAD
,即使您转到 main
的先前版本也是如此。将其视为具有值的本地文件。如果文件在 main
修订版 100
中具有值 remote@HEAD
并且此后没有更改,当您处于 main
修订版 200
时,值该文件仍然是 remote@HEAD
。当您转到 main
修订版 199
时,该文件仍指向 remote@HEAD
您的另一种选择是将 external
锁定到特定修订版,即 remote@123
,但随后它将 始终 处于 [=29] =] 修订版,同样与 main
修订版无关。
如果您在 main
中的代码修订与适当的 ext
修订之间存在硬依赖关系,那么您的 externals
属性 不应指向 HEAD
的远程,但在指定的版本。您将需要一些过程来使 属性 更新为最新的所需修订。
如果你这样做,你的 external
属性 可能 remote@123
在 main
修订版 100
,然后 remote@456
在 main
修订版150
然后 remote@789
在 main
修订 200
.
只有在这种情况下,指定 main
修订才会影响获取的外部存储库的修订。
选择:
作为一个完整的解决方法(上面描述的是 SVN 希望您使用它的方式),您可以为 "externals revision" 使用 Jenkins 参数。然后在 SCM 步骤中,告诉 Jenkins 忽略外部因素。然后在构建步骤中,手动解析外部值 属性,找出远程位置,并使用您在参数中指定的修订从该位置手动检出。