Architecture 大型持续集成的最佳实践是什么?

Architecture 大型持续集成的最佳实践是什么?,architecture,continuous-integration,agile,soa,Architecture,Continuous Integration,Agile,Soa,我的组织已经启动了一个持续集成项目,以自动构建面向公众的大型网站 所谓“大型”,我指的是30多个REST服务、外部CMS的内容和集成以及几个ASP.NET前端。这些系统是用Java和C语言混合编写的,部署在Linux和Windows服务器盒中 我们遵循一个敏捷流程,由七个跨学科团队组成,每周一次的冲刺周期 我们已经自动化了每个服务的构建和部署,但是现在我们的挑战是自动化(目前是手动的)集成和最终验收测试 我关注的是: 当一个服务更改了它的契约,它的使用者更新了他们的代码,但是初始服务进一步更改

我的组织已经启动了一个持续集成项目,以自动构建面向公众的大型网站

所谓“大型”,我指的是30多个REST服务、外部CMS的内容和集成以及几个ASP.NET前端。这些系统是用Java和C语言混合编写的,部署在Linux和Windows服务器盒中

我们遵循一个敏捷流程,由七个跨学科团队组成,每周一次的冲刺周期

我们已经自动化了每个服务的构建和部署,但是现在我们的挑战是自动化(目前是手动的)集成和最终验收测试

我关注的是:

  • 当一个服务更改了它的契约,它的使用者更新了他们的代码,但是初始服务进一步更改了它的契约时会发生什么?我们能得到一个稳定的体形吗

  • 依赖性检查在手动系统中是一场噩梦,在自动化系统中我看不到它变得更好。(在Java世界中,我们将Maven与Nexus结合使用,并计划使用Ivy;我们正试图将.NET代码压缩到其中,并获得有趣的结果。)

  • 我们的测试应该有多深?他们应该多久跑一次

当服务发生变化时会发生什么 它的合同和消费者都在更新 他们的代码,但最初的服务 进一步修改合同?我们会吗 /曾经/得到过稳定的体形吗

在我看来,除了考虑持续集成之外,您还需要考虑如何管理源代码管理系统。如果您有不同的团队处理web服务及其使用者,那么这些工作可以在功能分支中完成。一旦web服务契约的更改签入到功能分支中,该服务的使用者就可以更新,然后一旦该功能分支上的测试通过,它就可以合并到主干中

每次对主干进行签入时,测试都应该自动运行,如果测试没有通过,首要任务应该是修复任何损坏测试的地方

依赖项的具体问题是什么?无论您使用的是Maven还是Ivy,一旦为项目定义了依赖项,事情就会变得非常顺利。一旦你得到了一个可重复的构建,持续集成在这里就不会有什么坏处——当事情变得不同步时,它会更快地指出问题所在

当服务发生变化时会发生什么 它的合同和消费者都在更新 他们的代码,但最初的服务 进一步修改合同?我们会吗 /曾经/得到过稳定的体形吗

在我看来,除了考虑持续集成之外,您还需要考虑如何管理源代码管理系统。如果您有不同的团队处理web服务及其使用者,那么这些工作可以在功能分支中完成。一旦web服务契约的更改签入到功能分支中,该服务的使用者就可以更新,然后一旦该功能分支上的测试通过,它就可以合并到主干中

每次对主干进行签入时,测试都应该自动运行,如果测试没有通过,首要任务应该是修复任何损坏测试的地方


依赖项的具体问题是什么?无论您使用的是Maven还是Ivy,一旦为项目定义了依赖项,事情就会变得非常顺利。一旦你获得了一个可重复的构建工作,持续集成在这里就不会有什么坏处——它将有助于你在事情不同步时更快地指出问题所在。

我认为你会从调整应用程序基本功能的测试中受益匪浅,并且当服务合同的变更破坏了服务的客户时,这些测试可能会破坏服务

每次将网站部署到集成测试环境时,都应该运行这些测试(或至少是其中的“快速”子集)。整套设备将至少每晚运行

我认为你需要把这个网站看作是一个超级项目。如果有人更改了服务并破坏了客户,则会导致网站部署被标记为失败。通过在所有项目中汇总变更日志,确定负责的服务和开发人员应该相对容易

当您部署时,您通常会部署“网站”,它有效地调用每个包含的服务、内容等的部署过程,或者可能只是更改的部分


基本上,这意味着作为一个组织,您需要转变为要求服务足够稳定,以便能够与其他所有人的工作相集成。如果这是不可能的,他们会有自己的分支,每个人都会与以前的稳定版本相抗衡,并在以后的sprint中将与新版本的服务集成作为一个高优先级的故事。希望团队希望避免这种情况,并保留向后兼容的服务。

我认为,如果测试能够灵活地使用应用程序的基本功能,并且当服务合同的变更破坏了服务的客户时,很可能会破坏服务,您将从中受益匪浅

每次将网站部署到集成测试环境时,都应该运行这些测试(或至少是其中的“快速”子集)。整套设备将至少每晚运行

我认为你需要把这个网站看作是一个超级项目。如果有人更改了服务并破坏了客户,则会导致网站部署被标记为失败。通过在所有项目中汇总变更日志,确定负责的服务和开发人员应该相对容易

当您部署时,您通常会部署“网站”,它有效地调用每个包含的服务、内容等的部署过程,或者可能只是更改的部分

基本上,这意味着,作为一个组织,您需要转向requ