为PHP项目设置部署/构建/ CI周期

Pek*_*ica 198 php phing continuous-integration phpundercontrol

我大部分时间都是单独的开发人员,从事一些大型的,主要是基于PHP的项目.我希望专业化和自动化如何处理代码库的更改,并创建一个持续集成过程,使过渡在团队中工作,而不必进行根本性的更改.

我现在正在做的是,我为每个项目都有一个本地测试环境; 我为每个项目使用SVN; 更改在本地进行测试,然后通常通过FTP传输到联机版本.API文档是从源代码手动生成的; 单元测试是我慢慢进入的,它还不是我日常工作的一部分.

我想象的"构建周期"将执行以下操作:

  • 在本地测试后,变更集将被检入SVN.

  • 我开始构建过程.SVN HEAD修订版将被检出,必要时进行修改,并准备上传.

  • API文档会自动生成 - 如果我还没有详细设置,使用默认模板,扫描整个代码库.

  • 新修订通过FTP部署到远程位置(包括一些目录重命名,chmodding,导入数据库,和喜欢.)这是我已经喜欢phing非常多,但我很开放的,当然选择.

  • 运行驻留在预定义位置的单元测试.我被告知他们使用电子邮件,RSS或(最好)HTML输出的失败或成功,我可以抓取并放入网页.

  • (可选)预定义位置的最终用户"changelog"文本文件使用提交消息的预定义部分进行更新("现在可以同时过滤"foo"和"bar"此消息不一定与SVN提交消息相同,后者可能包含更多内部信息.

  • 像代码指标,代码样式检查等等东西现在不是我的主要关注点,但从长远来看,它们肯定会.带来这种开箱即用的解决方案非常受到关注.

我在寻找

  • 来自或处于类似情况的人的反馈和经验,并已成功实施此解决方案

  • 特别是,关于如何设置它的好的分步教程和演练

  • 提供尽可能多的自动化的解决方案,例如为每个新项目创建框架API,测试用例等.

并且

  • 产品推荐.到目前为止,我所知道的是用于构建的phing/ant,以及用于报告部分的phpUnderControlHudson.我尽可能地喜欢它们,但我当然没有详细的经验.

忙于工作,所以我倾向于简单的解决方案.另一方面,如果缺少一个功能,我会因为它太有限而哭泣.:)欢迎使用点击式解决方案.我也是可以使用PHP项目的商业产品推荐.

我的设置

我在本地工作Windows(确切地说是7),大多数客户端项目都在LAMP堆栈上运行,通常在共享主机上运行(=没有远程SSH).我正在寻找可以在我自己的环境中运行的解决方案.我准备为此设置一个Linux VM,没问题.托管解决方案对我来说很有意思,只要它们提供了所描述的所有方面,或者足够灵活,可以与流程的其他部分进行交互.

赏金 我接受了我觉得会给我最多里程的答案.这里有很多很棒的输入,我希望我能接受不止一个答案.感谢大家!

Ste*_*een 76

我经历过buildbot,CruiseControl.net,CruiseControlHudson.虽然我真的很喜欢CruiseControl*,但是对于非常复杂的依赖性案例来说,这太麻烦了.buildbot不容易设置,但它有一个很好的光环(我只是喜欢python,就是这样).但是哈德森赢得了前三名,因为:

  1. 这很容易设置
  2. 它很容易定制
  3. 它看起来不错,并有很好的概述功能
  4. 它为自身和所有已安装的插件提供了点击式更新.这是一个非常好的功能,我越来越欣赏

警告:我只使用linux作为上述构建服务器的基础(CC.net运行单声道),但它们应该全部 - 根据文档 - 运行跨平台.

设置哈德森服务器

先决条件:

  • Java(1.5将为您提供服务)
  • 对subversion服务器的读访问权限(我为hudson用户设置了一个单独的帐户)

从这里开始,它只是:

java -jar hudson.war
Run Code Online (Sandbox Code Playgroud)

这将运行一个小的服务器实例马上你的控制台,你应该能够浏览安装在你的http://localhost:8080,如果你没有别的事先在该端口上运行(您可以通过传递指定另一个端口--httpPort=ANOTHER_HTTP_PORT选项给以上命令)在"安装"过程中一切顺利.

如果您转到可用的插件目录(http://localhost:8080/pluginManager/available),您将找到支持上述任务的插件(默认情况下安装了subversion支持).

如果你有兴趣,你应该安装一个java应用服务器,如tomcatjetty.安装说明适用于所有主要应用程序服务器

更新:Kohsuke Kawaguchi为hudson 构建了一个Windows服务安装程序

在哈德森建立一个项目

以下演练中的链接假定​​hudson的运行实例位于 http://localhost:8080

  1. http://localhost:8080/view/All/newJob从左侧菜单中选择新作业()
  2. 给工作命名并Build a free-style software project在列表上打勾
  3. 按"确定"将转到作业的配置页面.除了它们之外,所有选项都有一个小问号.按此按钮将显示有关该选项的帮助文本.
  4. 在选项组"源代码管理"下,您将使用Subversion.Hudson接受url访问以及本地模块访问
  5. 在选项组"构建触发器"下,您将使用"轮询SCM".这里使用的语法是cron的语法,因此每隔5分钟轮询一次subversion存储库*/5 * * * *
  6. 构建项目的过程在选项组"Build"下指定.如果你已经拥有了一个包含你需要的所有目标的ant构建文件,那么你很幸运.只需选择"调用ant"并写入目标名称即可.选项组也支持maven和shell命令,但是还有一个可用于phing插件.
  7. 在"Post Build Actions"中勾选其他构建操作,例如电子邮件通知或构建工件的归档.

要设置hudson没有插件的进程,您可以直接通过构建设置中的shell脚本调用它们,也可以编写自己的插件

陷阱:

  • 如果你有它产生建筑文物,记得要定期将哈德森清理干净.
  • 如果您设置了20个以上的项目,请考虑不将其构建状态显示为hudson上的默认主页面

祝好运!

  • 我认为你的cron语法有错误.这将在每小时的第五分钟进行.如果你想每5分钟轮询一次回购,你需要使用*/5 (2认同)
  • @BrianWigginton:你完全正确.我甚至试图纠正帖子,但我无法保存它,因为我有"对无效主机名的引用",即"localhost".我希望人们看不起这里的纠正. (2认同)

小智 22

您正在寻找的术语是"持续集成".

以下是使用GIT + phpundercontrol的人的示例:http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl(CI服务器)可以使用Hosted SVN/GIT作为源.所以你甚至可以将它与GitHub或Beanstalk或其他东西一起使用.

然后,您可以将其与以下类型的软件集成:

  • PHPUnit的
  • PHP-codesniffer
  • phpDocumentor的
  • PHP Gcov
  • PHPXref
  • Yasca
  • 等等

您也可以尝试这个托管的CI:http://www.php-ci.net/hosting/create-project

但请记住,如果您自己集成这些工具,那些工具需要自定义支持.

您是否也考虑过项目管理和补丁管理?

您可以使用Redmine进行项目管理.它集成了持续集成支持,但仅作为客户端(而不是CI服务器).

尝试使用托管的SVN/GIT /等.解决方案,因为它们将覆盖您的备份并使其服务器保持运行,因此您可以专注于开发.

有关如何设置Hudson的教程,请参阅:http://toptopic.wordpress.com/2009/02/26/php-and-hudson/

  • 谢谢你的链接.我熟悉的产品,我希望的是更多教程式的演练,就像你提供的那样. (2认同)

Ste*_*ato 6

我使用Atlassian的Bamboo连续集成服务器作为我的主要PHP项目(以及其他产品,如鱼眼(存储库浏览),jira(问题跟踪器)和三叶草(代码覆盖)).

它支持SVN,现在支持Git,它有一个很棒的用户界面.它适用于linux,windows和mac,并且可以在自己的tomcat服务器上独立运行,这对于那些不喜欢花几天时间设置工具的人(比如我)来说非常棒.虽然它可能看起来很昂贵,但作为一个单独的开发人员我自己购买了10美元的入门套件许可证(软件10美元).这对小型团队来说非常棒,值得一看.


Aja*_*tel 5

PHPTesting PHPCI这是一个很好的,持续集成服务器内置的PHP.

此外,它的免费和开源.:)

它有多个插件..

PHPCI包括用于以下内容的集成插件:

  • Atoum
  • 贝哈特
  • 营火
  • Codeception
  • 作曲家
  • 电子邮件
  • 咕噜
  • IRC
  • PHP
  • 皮棉
  • MySQL的
  • PDepend
  • PostgreSQL的
  • PHP Code Sniffer
  • PHP复制/粘贴检测器
  • PHP规范
  • PHP单位
  • Shell命令
  • 焦油/邮编