帮助我改进我的持续部署工作stream程
我一直在开发一个工作stream程来练习一个PHP项目的大部分自动化的连续部署周期。 我想就这个工作stream程中的可能的stream程或技术瓶颈提出一些反馈意见,改进build议,以及如何更好地自动化和提高我的团队的易用性。
核心组件 :
-
Hudson
CI服务器 -
Git
和GitHub
-
PHPUnit
unit testing -
Selenium RC
-
Sauce OnDemand
用于Selenium RC
自动化,跨浏览器,云testing - 用于自动化testing服务器部署的
Puppet
-
Gerrit
的Git代码审查 -
Gerrit Trigger
Hudson
编辑 :我已经改变了工作stream程graphics,以考虑到ircmaxwell的贡献:删除PHPUnit
的Selenium RC
的扩展,并运行这些testing只作为QC阶段的一部分; 增加一个QC阶段; 在代码审查之后但在合并之前移动UItesting; QC阶段之后进行合并; 合并后移动部署。
该工作stream程graphics描述了该过程。 我的问题/想法/关注随之而来。
我的关注/想法/问题 :
-
使用这个系统的总体困难。
-
参与时间
-
使用
Gerrit
困难。 -
难以雇佣
Puppet
。 -
稍后我们将在
Amazon EC2
实例上进行部署。 如果我们现在正在使用Puppet
设置Debian
软件包并部署到Linode
切片,那么Linode
上的工作部署是否有可能在EC2
上突破? 我们是否应该从一开始就在EC2
上进行构build和部署? -
另一个问题是:
EC2
和Puppet
。 我们也在考虑使用Scalr作为解决scheme。 为了避免Puppet
的开销,为了避免这种情况的发生,让Scalr投资于Scalr会有多大意义? 我有一个次要的(哈!)在这里关心成本;Selenium
testing不应该经常运行,EC2
构build实例将全天候运行,但对于像5分钟构build这样的东西,花费一个小时的EC2
使用似乎有点多。 -
合并时可能的stream程瓶颈。
-
“A”可以移动吗?
积分 :这个工作stream程的一部分是由Digg的真棒张贴在持续部署的启发 。 上面的工作stream程图是受Android OS项目启发的 。
有多less人在工作呢? 如果你只有10到20个开发人员,我不确定把这样一个精心制作的工作stream程到位是否合理。 如果你pipe理500,当然…
我个人的感觉是KISS。 保持简单,愚蠢…你需要一个既高效又重要的过程:简单。 如果情况复杂的话,要么没有人会这么做,要么就是在一段时间之后, 如果你简单的话,它将成为第二性质,几个星期后,没有人会质疑这个过程(无论如何,它的语义)。
而另一个人的感觉总是运行你所有的UNITtesting。 这样,您可以跳过stream程图中的整个决策树。 毕竟,更昂贵的是,几分钟的CPU时间,或者脑循环来理解部分testing通过和大规模testing失败之间的差异。 请记住,失败是一个失败,没有实际的理由代码应该显示给审查,有可能会失败的构build。
现在,seleniumtesting通常是相当昂贵的,所以我可能会同意把这些testing推迟到评审员批准之后。 但是你需要考虑那个…
哦,如果我正在实施这个,我会在那里做一个正式的QC阶段。 我希望人类testing人员查看正在进行的任何更改。 是的,Selenium可以validation你所知道的事情,但只有一个人可以find你没有想到的事情。 将他们的发现反馈到新的Selenium和集成testing中,以防止回归…
重要的是让你的testing非常快速 ,即没有IO和运行并行和分布式testing的能力。 不知道如何适用于PHP,但如果你可以在内存数据库testing单元的代码和模拟环境,你会更好。
如果你有一个质量保证/质量控制或任何人之间的承诺和生产之间的方式,你将有一个问题得到一个完整的连续部署 。 关键是您的testing,监控和自动响应(免疫系统)足以消除容易出错的过程,从您的系统中演变人类。
所有function之间的切换都会导致事物减速,并因此增加部署所需的更改量(从而增加风险)。
从定义上来说,手动质量门是质量从一开始就没有build立起来的一种接受。 代码需要稍后审查的唯一原因是因为有人认为质量已经不够好了。
我正在尝试从我们的pipe道中删除正式的代码审查正是由于这个原因。 这会导致反馈延迟,并引用Martin Fowler的话:
“持续整合的重点在于提供快速的反馈,没有什么比一个需要很长时间的构build更能吸引CI的活动。
相反,如果需要,我想让代码审查提交者的请求,或者在编写团队成员的时候完成,也许是la XP对编程。
我认为这应该是你的目标,一旦代码被合并到源代码控制,绝对没有更多的手动干预。
我不知道这是否与PHP相关,但是至less可以用静态分析replace至less一些代码审查阶段。
代码评论的质量取决于评论者的素质,而静态分析依赖于最佳实践和模式,而且是全自动的。 我并不是说应该放弃代码审查,我只是认为它可以离线完成。
看到
http://en.wikipedia.org/wiki/Static_code_analysis
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis