在 Jenkins 中,如何构建在特定 SVN 存储库 URL 下创建的任何分支?

In Jenkins, how to build any branch created under a specific SVN repository URL?

提问人:sbi 提问时间:5/6/2014 最后编辑:sbi 更新时间:5/6/2014 访问量:1430

问:

我需要设置一个作业,用于构建到特定 SVN 存储库文件夹的主干的任何副本。每当有人在该特定文件夹中创建新分支时,都应签出、生成该分支并运行测试。分支将累积在该特定文件夹中,并且测试需要相当长的时间(其中包括它们使用外部硬件),因此每次添加新分支时都只构建在那里找到的每个分支是不可行的。相反,作业只需构建新添加的分支。

所以我需要的是这个:

  • 监视 URL () 的更改an_svn_repo.com/path_to_project/some_branch_folder
  • 如果已在 URL () 下创建了新文件夹,请检出新文件夹 (,但不是an_svn_repo.com/path_to_project/some_branch_folder/new_stuffsome_branch_folder/new_stuffsome_branch_folder)
  • 执行该文件夹中的构建脚本

我有一些关于如何处理这个问题的想法,但它们有很大的不同,我不知道它们有多可行,所以我想听听你的意见。

一种方法是检查哪个子文件夹具有最新的更改,并在该子文件夹中调用构建脚本。(但是,如果几乎同时创建两个分支呢?另一种可能是在某个地方存储一些关于已构建的分支的信息,并且只构建新的分支。(但我不知道 Jenkins 或插件是否有任何方法可以在作业调用之间存储信息。此外,成功构建分支可以在该分支上设置修订属性,然后 Jenkins 可以忽略该属性。或者我使用构建参数并从脚本开始作业。

我可以保留一个脚本来执行必要的工作,但如果可能的话,最好在 Jenkins 本身中完成大部分工作。an_svn_repo.com/path_to_project/some_branch_folder

你有什么想法?

SVN Jenkins 连续积分

评论

0赞 Cole9350 5/6/2014
“或者我使用构建参数并从脚本开始工作”......是的
0赞 sbi 5/6/2014
@Cole但是我会放弃 Jenkins 的自动化,用户将不得不手动开始构建。我宁愿不那样做。
0赞 Cole9350 5/6/2014
如果这是您所期望的,则没有任何方法可以使用插件执行此操作,正如您提到的,这将需要一些繁重的脚本工作。但是,如果您知道如何在提交后钩子中识别新创建的分支,并使用它来调用以文件夹名称作为参数的构建作业,我认为您的作业不必手动触发。但是,重新评估为什么你如此频繁地分支,这可能是更好的利用,这是必要的?Jenkins 受到开发过程的限制,这里描述的定义不是持续集成
0赞 sbi 5/6/2014
我可以编写大部分需要的脚本,并从 Jenkins 调用脚本。修订属性将允许在工作创新之间存储必要的信息。只是我宁愿在 Jenkins 中完成大部分工作,而不是在脚本中完成。(至于为什么这是必要的:基本上,这些是要测试的候选版本。任务是尽可能轻松地按一下按钮创建这样的候选者。
0赞 Cole9350 5/6/2014
是的,我完全理解你有一个需要解决的合理问题。之所以需要编写脚本而不是完全由 jenkins 处理,是因为您试图让 jenkins 做一些它不是为之设计的事情。stackoverflow.com/questions/5611365/......

答:

2赞 David W. 5/6/2014 #1

查看 Build with Parameters 插件。我以前用它来做这样的事情。我们有一个网站坚持每个功能和错误修复必须是不同的分支,因此我们定义了一个分支构建,该构建使用“使用参数构建”插件来指定要构建的分支

你所要做的就是定义一个 Subversion post-commit 钩子,当项目所在的分支被创建或修改时,它会触发项目的构建。这是一个相当直接的触发因素。

评论

0赞 sbi 5/8/2014
感谢您对此进行调查()。不幸的是,我们最难说服管理员让我们更改修订属性,我们希望在我们现在实现的脚本中使用这些属性,以便标记已经构建的分支。让它们允许我们一个提交后的钩子(并在必要时改变它)不是我想要争取的。+1:(
0赞 sbi 5/8/2014
我们发现的解决方案与您的解决方案非常相似:我们有一个监视分支文件夹的工作。在更改时,它会运行一个脚本,该脚本检查是否有以前未构建的分支,并使用正确的参数(employing )触发另一个作业,然后构建并测试该分支。已生成的分支由属性标记,以便脚本不会尝试再次生成它们。(假设更改修订属性不会触发 Jenkins,我们希望这是一个自定义修订属性,因此与管理员进行了斗争。/buildWithParameters?BRANCH=new_stuff
0赞 sbi 5/8/2014
我们对这个解决方案并不感到自豪,但它似乎可以工作并做我们想做的事。
0赞 David W. 5/8/2014
有趣的是,使用监视分支文件夹更改的作业。它的工作方式应该与提交后触发器几乎相同。为什么不想重建已更改的分支?
0赞 sbi 5/8/2014
正如我在问题中所写的:“分支将积累在那个特定的文件夹中,并且测试需要相当长的时间(其中包括它们使用外部硬件),因此每次添加新分支时都构建在那里找到的每个分支是不可行的。