-1

假设正在进行部署管道。 SVN标签和开发版本正在改变。那时开发人员正在进行他的改变。所以CI服务器有可能发布新的提交未经测试的生产更改或其他冲突发生。我该如何处理这种情况。我是否需要锁定整个主干,直到构建管道完成。有没有其他的工作。连续交付 - 处理中间svn提交

+1

“CI服务器发布新的提交未经测试的生产更改” - 呃,什么? –

+0

假设CI服务器将开始部署管道的最后一步,这是将trunk中的源代码标记为特定版本,然后提交trunk以将当前开发版本更改为下一个快照版本的过程。就在这一步之前,一个疯狂的开发人员将他的更改提交给主干。因此,如果ci服务器在提交后立即标记trunk,它也会标记这些更改,这在发布的二进制文件中不存在。我是否成功解释了这种情况? – user2903314

+0

在我看来,CI服务器不应该部署到生产环境。 –

回答

1

如果我理解正确的话,您认为以下步骤

    后提交,生成服务器会检查当前Trunk(假设修订版A)
  1. 进行构建,
  2. 执行一些测试,
  3. 标签的行李箱,如果试验成功
  4. 并将其部署到生产(仍然只如果测试成功)

“疯狂”的开发人员在第3步和第4步之间提交,因此创建了修订版B.现在假设构建服务器将再次检出最新修订版(这将是修订版B)。这种行为确实会造成一些麻烦。

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

此外,请考虑在任何部署自动部署到生产之前,应至少有一些手动审批步骤。据我所知,这通常是在连续交付的情况下提及的。

持续交付的关键是恕我直言,你可以在任何时候按下按钮来部署当前版本的源代码。恕我直言,这并不意味着每个提交应该自动部署。

+0

我们可以用两种方式进行标记。 1.复制树干:例如:svn copy http://mydomain.com/myproject/trunk http://mydomain.com/myproject/tags/1.0.0。 2.复制 – user2903314

+0

我们可以用两种方式标记。 1.副本主干:例如:svn副本http://mydomain.com/myproject/trunk http://mydomain.com/myproject/tags/1.0.0 2.复制本地工作副本,例如:svn副本。 http://mydomain.com/myproject/tags/1.0.0 因此,在CI服务器内部,我们应该始终使用用于构建和测试的检出副本进行标记。我对吗? – user2903314

+0

是的,这将是去恕我直言的方式。 –