我们使用Jenkins在每次提交SCM时对项目进行增量构建。我们希望为每个提交获得单独的构建。但是,在以下场景中,天真的方法(设置SCM并使用提交后挂钩来触发构建)会出现问题:
这种“竞争条件”使找到哪一个提交已经破坏了构建/引入的警告变得复杂。
目前使用的解决方案是检查一个作业的变化(“调度程序作业”)并触发另一个作业来进行实际的结帐和构建。
这个问题有没有合适的解决方案?
答案 0 :(得分:7)
还没有,有一个功能请求涵盖了这种构建,但它仍然是开放的:Issue 673
答案 1 :(得分:2)
也许它错过了重点,但我们在这里运行了一个非常好的构建过程。
简而言之,理想的开发者日就像这样
没有开发者2加入聚会并尝试做一些工作
这个过程完全一样,无论是开始工作,还是分支机构。开发人员1更快,他的更改合并到开发分支。现在,在开发人员2发布他的更改之前,他必须在开发人员1所做的更改之后修改他的更改。
因此,我们确信,构建过程是针对对代码库进行的每次更改而触发的。
我们将此用于C#开发 - 在Windows上不在Linux上
答案 2 :(得分:1)
我认为可能有所帮助的是将安静时段(Jenkins>管理Jenkins>配置系统)设置为0
并将SCM轮询设置为非常短的时间。但即使在那个短暂的间隔期间,也可能有两次提交。截至目前,Jenkins没有将构建拆分为多个SVN提交的单一构建的功能。
以下是有关该主题的教程:Quiet Period Feature。
答案 3 :(得分:1)
我不相信你想做的事情是可能的。 Daniel Kutik提到的“安静时期”实际上用于告诉Hudson / Jenkins等待多长时间,以便允许其他提交同一个项目。含义 - 如果您将此值设置为60秒并且您已进行提交,则它将在开始新构建之前等待一分钟,从而允许其他提交的时间被提取(在该一分钟内)。 / p>
答案 4 :(得分:1)
如果您使用规则“NO COMMIT on a broken build”并将其视为合乎逻辑的结论,那么实际上您最终会得到“没有提交破坏的构建或正在构建的进度”,在这种情况下,您描述的问题是程。
让我解释一下。如果你有两个开发人员在同一个项目上工作,他们都尝试提交(或推送,如果你使用的是DVCS)。其中一个将成功,而另一个将失败,需要在提交之前更新。
必须执行更新的开发人员从提交历史中知道另一个提交是最近的,因此正在构建(即使它尚未检出)。他们不知道那个构建是否已经破坏了,所以唯一安全的选择就是等等看。
唯一阻止你使用上述方法的是如果构建需要很长时间,在这种情况下你可能会发现你的开发人员永远不会有机会提交(它总是在构建)。这是一个将您的构建拆分为多个步骤的驱动程序的驱动程序,因此Post Commit作业不会超过5分钟,但理想情况下为1分钟。
答案 5 :(得分:1)
正如Issue 673中的某个人所指出的,您可以尝试使用参数作为您要构建的实际git提交来启动参数化构建。这与VCS提交挂钩结合使用。