【问题标题】:Create Jenkins jobs automatically from SVN post-commit hook从 SVN 提交后挂钩自动创建 Jenkins 作业
【发布时间】:2015-10-09 19:37:07
【问题描述】:

我需要的是一个 SVN 提交后挂钩,它必须能够创建(不仅仅是触发运行)它自己的 Jenkins 作业(如果修订 ID 为 0),并且它必须在多个项目上执行。基本上,每个项目都必须能够使用这个钩子在第一次提交时在 Jenkins 中添加自己的工作。我需要知道的是如何为 Jenkins 提供每个项目的存储库 URL,始终使用相同的钩子。

【问题讨论】:

    标签: svn jenkins post-commit-hook


    【解决方案1】:

    当您运行提交后挂钩时,提交者必须等到提交完成——这意味着等待提交后操作本身完成。如果这需要太长,而太长可能是几秒钟,用户会反抗。想象一下,每次您进行提交时,提交都需要额外的 15 秒。你坐在那里十五秒钟不知道发生了什么。用户要等多久才能开始尝试终止提交?

    您可以通过 Jenkins REST API 复制 Jenkins 作业并更新作业的 config.xml。这不是微不足道的,但它是可能的。但是,这不是您要使用的机制。

    不要让数十个 Jenkins 作业在您的存储库中构建项目的子树,而只需一个 Jenkins 作业来构建已修改的项目子树。

    假设您的项目foo 的Subversion URL 是http://svn.vegicorp.com/projects/foo,而您的项目bar 的Subversion URL 是http://svn.vegicorp.com/projects/foo。您可以设置一个 Jenkins 作业来监控 http://svn.vegicorp.com/projects,然后查看 foo 和/或 bar 是否已被修改,然后为该特定子树启动构建。当有人创建项目 http://svn.vegicorp.com/projects/fubar 时,Jenkins 也会监视该项目,因为它已经在查看 http://svn.vegicorp.com/projects

    您可以使用Build Name Setter Plugin 将构建的名称 设置为已构建的子树。这将让您查看哪些构建适用于哪些项目。

    这应该比尝试在运行中创建 Jenkins 作业更容易在 Jenkins 中设置。

    【讨论】:

    • 非常感谢,非常有用。与我的想法相比,这似乎真的容易得多。因此,如果我理解得很好,我需要做的是创建一个作业并将 SVN URL 设置为包含我想要构建和测试的每个项目的那个。然后,将“Repository depth”设置为“Infinity”(这样子树中包含的每个项目都会被拾取),然后像我想对每个作业一样简单地配置这个作业。正确的?这太棒了。
    • 我认为您的存储库中的 URL 结构类似于 http://server/project/brancheshttp://server/branches/project。假设它是http://server/branches/project。您检查 http://server 是否有更改。然后,您可以查看更改了哪个分支和哪个项目并进行构建。使用构建名称设置器插件来指定构建的分支和项目。我认为您的所有项目都以相同的方式构建。
    • 好的,非常感谢,最后一个问题:我还需要发送一封电子邮件给最终会导致测试失败的提交者,但是,如果他导致例如 5 个错误在一个项目和另一个提交者在另一个项目中导致了 3 个错误,我需要通过电子邮件向他们发送正确数量的错误。我确信这会以我最初想要创建 Jenkins 作业的方式工作,但是您的方法是否也会这样做,或者两个提交者都会被警告 8 个错误(作业中所有错误的总和)?
    • 另外,你确定当一个新项目将在受监控的树中创建时,构建和测试只会为新项目而不是整个 Jenkins 作业触发(所以所有存储库中包含的项目)?
    • Jenkins 可以在失败时自动向代码的提交者发送电子邮件。如果来自多个提交者的多个提交,所有提交者都将收到电子邮件。但是,通常情况下,Jenkins 会在检测到每个提交时进行构建,因此只有一个提交者。
    猜你喜欢
    • 1970-01-01
    • 2019-10-02
    • 1970-01-01
    • 2014-08-10
    • 2016-06-02
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多