<kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

              <kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

                      <kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

                              <kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

                                      <kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

                                              <kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

                                                      <kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

                                                              <kbd id='jac42HuJWKTJQEi'></kbd><address id='jac42HuJWKTJQEi'><style id='jac42HuJWKTJQEi'></style></address><button id='jac42HuJWKTJQEi'></button>

                                                                  凯发娱乐平台客户端_另一个关于一连集成和版天职支的故事

                                                                  发布时间:2018-01-21      点击:852     作者:凯发娱乐平台客户端

                                                                  经典书本《一连交付》[1]的作者曾就分支归并和代码演化等题目具体地接头过滥用分支对一连集成的负面影响。而我本日要说的是这样一个故事,,一个只能申请到很是有限的硬件装备的团队,他们是如安在多分支计策下实践一连集成的。

                                                                  一个团队接办了一个项目,必要在开拓新特征的同时维护几个宣布分支。团队打算实践一连集成,但手头的硬件资源严峻不敷,无法满意全部分支的陈设流水线同时运转。

                                                                  流水线分为三个阶段,别离是:

                                                                  commit 编译、单位测试和部门集成测试并打包

                                                                  at 陈设应用措施并运行自动化验收测试

                                                                  uat 陈设应用措施并由测试工程师执行手工验收测试

                                                                  相干厂商内容

                                                                  从C#看开放对编程说话成长的影响 Netflix的工程文化:是什么在鼓励着我们? 百度贴吧之父:产物司理的发明和生长 Apache Kafka的已往,此刻,和将来

                                                                  相干赞助商

                                                                  另一个关于陆续集成和版本分支的故事

                                                                  另一个关于陆续集成和版本分支的故事

                                                                  这里我们略去了机能测试阶段和宣布阶段,它们一样平常必要特殊布置硬件装备,与这个故事相关不大。流水线的每一个阶段都也许依靠于某些外部处事,好比Web容器、数据库等。为防备不须要的滋扰,每个阶段凡是会尽也许地行使专用的外部处事,测试工程师在uat阶段做手工测试时可不喜好Web容器因为at阶段被触发而被重启。

                                                                  另一个关于陆续集成和版本分支的故事

                                                                  永生命周期的分支同骨干一样也必要陈设流水线,也就必要更多的外部处事。假如骨干的at阶段依靠于数据库,那么某个宣布分支的at阶段也同样必要依靠于数据库。而凡是你得为它们筹备差异的数据库实例以防相互滋扰。外部处事的安装和运行是必要硬件资源的,在资源窘迫时,分支无疑加剧了这个题目。因为一些非凡环境,在好几个项目中我们只申请到了一台破旧的PC server作为团队的测试装备。但我们并不规划因此放弃一连集成,以是让我们看看能不能在螺蛳壳里做道场吧。

                                                                  相对其他外部处事,数据库是一个吃硬件资源的大户。这个项目标出产情形将行使Oracle数据库,假如流水线的每个阶段都是用独立的Oracle实例,那么一个骨干和两个宣布分支就必要9个Oracle实例。

                                                                  在流水线的某些阶段,可以行使一些更换方案,好比commit阶段,可以把耐久化测试运行在embeddedhsqldb上,这样可以去除此阶段对数据库实例的需求,并且这样commit阶段的构建时刻应该会有所镌汰[2]。

                                                                  后续at和uat的成果验收测试最好运行在与出产情形沟通范例的数据库上。我们曾思量过回收增量式的数据库开拓计策[3],那么差异阶段、差异分支的数据库模式(schema)应该是兼容的,这样就只必要一个数据库实例。不外这个技能门槛较量高,并且差异分支的流水线的测试也许因为整理和筹备测试数据而相互滋扰。于是我们抉择操作数据库用户[4]来断绝差异的情形,好比骨干的at情形行使用户at_trunk,而分支的at情形行使at_branch_0816

                                                                  另一个关于陆续集成和版本分支的故事

                                                                  这对应用措施的代码和架构有更高的要求,因为数据库用户名变为情形相干设置了,就必需去除硬编码,譬喻在SQL语句中不能有明晰的用户名

                                                                  select * from billing.t_order where .....

                                                                  改为

                                                                  select * from t_order where .....

                                                                  其拭魅这种限定也有其甜头,镌汰了团队不经意地行使数据库集成[5](好比直接操纵另一个用户中的数据)的机遇,从而更审慎地计划体系界线和集成方案。不外,若要改革行使数据库集成的遗留体系,还得曲线救国,先把其置入陈设流水线的反馈轮回再做窜改,这时对付跨数据库用户操纵可以回收数据库同名来处理赏罚,好比Oracle支持将其它一个用户的数据库工具映射到本用户的一个同名工具:

                                                                  -- Create the synonym create or replace synonym t_billing_order  for billing.t_order;

                                                                  记得将这个剧本参数化,可以行使Ant和占位符替代,在执行剧本前,替代响应情形的用户名。

                                                                  Web中间件是另一个大头,不外这里今朝团队也没发明有什么出格的步伐。可以思量在陈设剧本中行使参数化的contextPath,这样在统一个Tomcat或是Weblogic中可以陈设多个情形的应用措施,可是这样一来加大了设置难度,二来节省的资源有限,以是根基上照旧通过一个情形一个Tomcat或是一个Weblogic的一个Domain来实现的。

                                                                  假如应用措施还依靠动静组件,那么还应该筹备流水线各阶段专用的动静中间件。不像数据库,共享动静中间件而激发的题目较量潜伏。有一次,我们正在为一个应用措施做宣布前的回归测试,此前都没有发明题目,合法我们以为安枕无忧时,这个环节的测试却因为应用措施无法收到动静而失败。其时刻隔宣布截至期的时刻紧要,我们被迫暂且放弃了异步动静的方案,改用同步处理赏罚。其后,我们发明题目的缘故起因在于多个Consumer监听统一个动静行列,而一个料想之外的Consumer“抢走”了我们的动静。

                                                                  另一个关于陆续集成和版本分支的故事