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

标签 php continuous-integration phing phpundercontrol

我大部分时间都是一个孤独的开发人员,从事许多大型项目,主要是基于 PHP 的项目。我想特化和自动化处理代码库更改的方式,并创建一个持续集成流程,使过渡到团队工作成为可能,而无需进行根本性更改。

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

我设想的“构建周期”将执行以下操作:

  • 一个变更集在本地测试后被 checkin 到 SVN。

  • 我开始构建过程。 SVN HEAD 修订被 check out ,如有必要进行修改,并准备好上传。

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

  • 新版本通过 FTP 部署到远程位置(包括一些目录重命名、chmodding、导入数据库等。)这是我已经喜欢的 phing非常多,但我当然愿意接受其他选择。

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

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

  • 代码指标、代码样式检查等不是我现在的主要关注点,但从长远来看,它们肯定会。开箱即用的解决方案非常受欢迎。

我在找

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

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

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

还有

  • 产品推荐。目前我知道的是phing/ant 用于建筑,phpUnderControlHudson用于报告部分。就我所见,我都喜欢它们,但我当然没有详细的经验。

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

我的设置

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

Bounty I am accepting the answer that I feel will give me the most mileage. There is a lot of excellent input here, I wish I could accept more than one answer. Thanks everyone!

最佳答案

我已经通过 buildbot , CruiseControl.net , CruiseControlHudson .尽管我真的很喜欢 CruiseControl*,但对于真正复杂的依赖案例来说实在是太麻烦了。 buildbot 设置起来并不容易,但它有一个很好的光环(我就是喜欢 python,仅此而已)。但 hudson 战胜了前三名,因为:

  1. 设置很简单
  2. 轻松定制
  3. 它看起来不错,并且有很好的概览功能
  4. 它本身和所有已安装的插件都有点击式更新。这是一个非常好的功能,我越来越欣赏它

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

设置 hudson 服务器

先决条件:

  • Java(1.5 可以满足您的需求)
  • 对 subversion 服务器的读取权限(我有一个单独的 hudson 用户帐户)

从这里开始,就是:

java -jar hudson.war

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

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

如果你有兴趣,你应该安装一个java应用服务器,比如tomcatjetty . Installation instructions适用于所有主要应用服务器

更新:Kohsuke Kawaguchi已构建 windows service installer对于 hudson

在 hudson 建立一个项目

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

  1. 从左侧菜单中选择新作业(http://localhost:8080/view/All/newJob)
  2. 为工作命名并在列表中勾选构建一个自由风格的软件项目
  3. 按“确定”将带您进入作业的配置页面。除了它们之外,所有选项都有一个小问号。按此按钮将显示有关该选项的帮助文本。
  4. 在选项组“源代码管理”下,您将使用 Subversion。 Hudson 接受 url 访问以及本地模块访问
  5. 在选项组“构建触发器”下,您将使用“轮询 SCM”。此处使用的语法是 cron 的语法,因此每 5 分钟轮询一次 subversion 存储库将是 */5 * * * *
  6. 构建项目的过程在选项组“构建”下指定。如果您已经有一个包含所有您需要的目标的 ant 构建文件,那么您很幸运。只需选择“Invoke ant”并写下目标的名称。选项组也支持开箱即用的 maven 和 shell 命令,但还有一个 plugin available for phing .
  7. 在“构建后操作”中勾选其他构建操作,例如电子邮件通知或构建工件的存档。

对于设置 hudson 没有插件的进程,您可以在build设置中通过 shell 脚本直接调用它们,或者您可以 write you own plugin

陷阱:

  • 如果您让它产生构建工件,请记住让 hudson 定期清理自己。
  • 如果您设置的项目超过 20 个,请考虑将其构建状态显示为 hudson 上的默认主页

祝你好运!

关于php - 为 PHP 项目设置部署/构建/CI 周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2180460/

相关文章:

maven-2 - 当依赖项已过期时如何中断 Maven 构建?

php - 是否有可用于 phing 的 ssh 和 scp 任务?

php - 使用 PHP 和 MySQL 创建的框架的 URL 问题

php - 帮助进行 MySQL 查询

java - 如何让.properties从Jenkins读取参数

tfs - 在 TFS 中构建管道

phing - 使用 Phing 查找替换文件中的文本

phing - 使用 phing 转储 sql 数据库

php - Localhost URL 在浏览器中有效,但对于 PHP curl_exec 返回 bool(false)

php - 使用数据库查询结果填充下拉列表