为 PHP 项目设置部署/构建/CI 周期设置哈德逊服务器在哈德逊建立项目陷阱:

我大部分时间都是一个孤独的开发人员,从事许多大型的,主要是基于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,没问题。只有当托管解决方案提供了所描述的所有方面,或者足够灵活地与流程的其他部分进行交互时,它们才对我有用。

赏金我正在接受一个答案,我觉得它会给我最大的里程。这里有很多优秀的意见,我希望我能接受不止一个答案。谢谢大家!


答案 1

我经历过buildbotCruiseControl.netCruiseControlHudson。尽管我真的很喜欢CruiseControl*,但对于非常复杂的依赖关系情况来说,这太麻烦了。buildbot并不容易设置,但它有很好的光环(我只是喜欢python,仅此而已)。但哈德森赢得了前三名,因为:

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

警告:我只使用linux作为上述构建服务器的基础(CC.net 运行在mono上),但是根据文档,它们都应该跨平台运行。

设置哈德逊服务器

先决条件:

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

从这里开始,它只是:

java -jar hudson.war

这将立即在您的控制台上运行一个小型服务器实例,如果您事先在该端口上没有运行任何其他内容(您可以通过将选项传递给上述命令来指定另一个端口),并且一切都在“安装”过程中顺利进行,您应该能够在您的 上浏览安装。http://localhost:8080--httpPort=ANOTHER_HTTP_PORT

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

如果这引起了你的胃口,你应该安装一个java应用程序服务器,比如tomcatjetty安装说明适用于所有主要的应用程序服务器

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

在哈德逊建立项目

以下演练中的链接假定哈德森的运行实例位于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. 生成项目的过程在选项组“生成”下指定。如果你已经有一个蚂蚁构建文件,里面有你需要的所有目标,那么你很幸运。只需选择“调用蚂蚁”并写下目标的名称。选项组也支持开箱即用的maven和shell命令,但也有一个插件可用于phing
  7. 勾选“构建后操作”中的其他构建操作,例如电子邮件通知或构建工件的存档。

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

陷阱:

  • 如果您让它生产构建伪影,请记住让哈德逊定期清理。
  • 如果您设置了 20 多个项目,请考虑不要将其构建状态显示为 hudson 上的默认主页

祝你好运!


答案 2

您正在寻找的术语是“连续集成”。

下面是一个使用 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
  • 亚斯卡
  • 等。

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

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

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

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

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

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


推荐