Continuous integration 连续交付-在svn提交之间处理

Continuous integration 连续交付-在svn提交之间处理,continuous-integration,continuous-deployment,continuous-delivery,Continuous Integration,Continuous Deployment,Continuous Delivery,假设正在进行部署管道。SVN标记和开发版本更改正在进行。此时,开发人员正在提交其更改。因此,CI服务器有可能会释放新提交的未经测试的生产更改,或者发生一些其他冲突。我如何处理这种情况。在构建管道完成之前,我是否需要锁定整个主干。是否还有其他解决方法。如果我理解正确,您可以采取以下步骤 提交之后,构建服务器将签出当前主干(比如修订版a) 执行构建 执行一些测试 如果测试成功,则标记中继 并部署到生产环境中(仍然只有在测试成功的情况下) “疯狂”的开发人员在第3步和第4步之间提交,从而创建了修订版B

假设正在进行部署管道。SVN标记和开发版本更改正在进行。此时,开发人员正在提交其更改。因此,CI服务器有可能会释放新提交的未经测试的生产更改,或者发生一些其他冲突。我如何处理这种情况。在构建管道完成之前,我是否需要锁定整个主干。是否还有其他解决方法。

如果我理解正确,您可以采取以下步骤

  • 提交之后,构建服务器将签出当前主干(比如修订版a)
  • 执行构建
  • 执行一些测试
  • 如果测试成功,则标记中继
  • 并部署到生产环境中(仍然只有在测试成功的情况下)
  • “疯狂”的开发人员在第3步和第4步之间提交,从而创建了修订版B。现在您假设构建服务器将再次签出最新的修订版(即修订版B)。这种行为确实会引起一些麻烦

    但是,构建服务器应该根据特定的版本执行所有步骤,这在普通设置中不是问题。詹金斯通常在工作开始时有一个结账步骤。如果最后有一个标记步骤,您通常不希望Jenkins盲目地标记当前主干(导致您描述的问题),而是标记在Jenkins工作区中签出的修订

    另外,请考虑在自动部署到生产之前,至少应该有一些手动批准步骤。就我所见,这通常是在连续交付的背景下提到的


    持续交付的关键是确保您能够在任何时候按一个按钮部署当前版本的源代码。这并不意味着每个提交都应该自动部署。

    “CI服务器将新提交的未经测试的更改发布到生产环境”-呃,什么?假设CI服务器将开始部署管道中的最后一步,这是将主干中的源代码标记为特定版本,然后提交主干以将当前开发版本更改为下一个快照版本的过程。就在这一步之前,一个疯狂的开发人员将他的更改提交到trunk。因此,如果ci服务器在提交后立即标记主干,它也会标记这些更改,而这在发布的二进制文件中并不存在。我是否成功地解释了这种情况?在我看来,CI服务器不应该部署到生产环境中。我们可以通过两种方式进行标记。1.复制中继:例如:svn复制。2.我们可以用两种方式标记。1.复制中继:例如:svn复制2。复制本地工作副本,例如:svn副本。因此,在CI服务器内部,我们应该始终从用于构建和测试的签出副本中进行标记。我说得对吗?是的,那就是去IMHO的路。