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

我大部分时间都是一个孤独的开发人员,从事许多主要基于php的大型项目。我希望专业化和自动化处理代码库的更改,并创建一个持续集成过程,使转换到团队中工作成为可能,而不必进行根本的更改。

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

我所设想的“构建周期”是这样的:

  • 在本地测试之后,将更改集签入SVN。

  • 我开始构建过程。检查出SVN HEAD修订,必要时进行修改,并为上传做好准备。

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

  • 新版本通过FTP部署到远程位置(包括一些目录重命名、chmodding、导入数据库等)。这是我已经非常喜欢phing的东西,但我当然对替代方案持开放态度。

  • 运行位于预定义位置的单元测试。我可以通过电子邮件、RSS或(最好是)HTML输出来了解他们的成功或失败,然后把它们放到网页上。

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

  • 像代码度量、代码风格检查之类的东西现在还不是我的主要关注点,但从长远来看,它们肯定会。解决方案带来了这种开箱即用,是非常善意的。

我在找

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

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

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

  • 产品推荐。到目前为止,我所知道的是phing/ant用于构建,phpUnderControl哈德逊用于报告部分。就我所能看到的,我都喜欢,但我当然没有详细的经验。

我是淹没工作,所以我有一个强烈的倾向于简单的解决方案。另一方面,如果缺少一个功能,我就会抱怨它太有限了。点选解决方案也很受欢迎。我也向商业产品推荐可以与PHP项目一起工作的产品。

我的设置

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

< >强赏金 我接受我认为能给我最大好处的答案。这里有很多很好的输入,我希望我能接受不止一个答案。谢谢大家!< / p >

41806 次浏览

我最近开始了同样的过程,并且正在使用豆茎进行svn托管。

付费账户有两个很不错的功能(我想从15美元开始):

  • 部署允许用户为登台服务器和生产服务器创建FTP目标,可以通过单击按钮(inc指定修订和分支)进行部署。
  • Webhooks允许用户设置一个url,在每次提交/部署时调用,传递修订号、描述和用户等信息。这可以用来更新文档,运行单元测试和更新变更日志。

我确信有其他托管或自托管svn服务器具有这两个功能,但beanstalk是我有经验的一个,它工作得非常非常好

还有一个API,我认为可以使用它进一步将部署集成到您的流程中。

您要找的术语是“连续集成”。

下面是一个使用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/

我在我的主要PHP项目中使用Atlassian的竹子持续集成服务器(以及他们的其他产品,如鱼眼(存储库浏览),jira(问题跟踪器)和三叶草(代码覆盖))。

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

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

  1. 设置起来很简单
  2. 它很容易定制
  3. 它看起来不错,有很好的概览功能
  4. 它对自己和所有安装的插件都进行了点击更新。这是一个非常好的功能,我越来越喜欢它

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

正在设置哈德森服务器

先决条件:

  • Java(1.5就可以了)
  • 对subversion服务器的读取访问权限(我有一个hudson用户的单独帐户)

从这里,它只是:

java -jar hudson.war

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

如果你去可用的插件目录(http://localhost:8080/pluginManager/available),你会找到支持你上面提到的任务的插件(subversion支持默认安装)。

如果你对此有兴趣,你应该安装一个java应用服务器,比如tomcat码头安装说明可用于所有主要的应用程序服务器

更新: Kohsuke川口为hudson构造了一个Windows服务安装程序

在哈德逊建立一个项目

下面演练中的链接假设hudson的一个运行实例位于http://localhost:8080

  1. 从左侧菜单中选择new Job (http://localhost:8080/view/All/newJob)
  2. 给出作业名称,并在列表中勾选Build a free-style software project
  3. 按“ok”将带您进入作业的配置页面。所有选项旁边都有一个小问号。按下此键将显示有关该选项的帮助文本。
  4. 在“源代码管理”选项组下,您将使用Subversion。Hudson既接受url访问,也接受本地模块访问
  5. 在选项组“构建触发器”下,您将使用“Poll SCM”。这里使用的语法是cron的语法,所以每5分钟轮询subversion存储库将是*/5 * * * *
  6. 构建项目的过程在选项组“Build”下指定。如果您已经有一个包含所需所有目标的ant构建文件,那么您就很幸运了。只需选择“Invoke ant”并写下目标的名称。选项组支持maven和shell命令以及开箱即用,但还有一个phing插件可用
  7. 在“Post build actions”中勾选额外的构建操作,例如电子邮件通知或构建工件的存档。

为了设置hudson没有插件的进程,你可以在构建设置中直接通过shell脚本调用它们,或者你可以编写自己的插件

陷阱:

  • 如果你让它生产构建人工制品,记得让哈德森定期清理自己。
  • 如果你设置了超过20个项目,考虑将它们的构建状态显示为hudson上的默认主页

好运!

我不使用很多产品,甚至不使用你使用的产品类型,但我会给你我的经验。

我在PROD环境的同时运行一个TEST环境。我本身没有本地测试。如果把某些东西放到真正的TEST环境中太难了,那么我就修改我的构建过程。我不认为本地测试有什么意义,因为环境是不同的。更新:我在本地做的唯一一件事是在上传任何东西之前运行“php -l”。阻止愚蠢的错误。

构建过程使用当前工作区中的任何内容,其中包括未提交的代码。这不是每个人的茶杯,但我将经常测试。所有内容都在提交到PROD之前提交。

我的构建过程的一部分(类似于您的)创建了两个META文件。一个包含最后(通常)100个更改,并提供当前更改列表号。显示了安装的更改。另一个包含CLIENTSPEC(在Perforce术语中),它准确地向我展示了在这个构建中使用了哪些分支。所有这些给了我可复制的构建。

我没有直接构建到目标环境,而是构建到服务器上的暂存区域。我使用SSH,所以这是有意义的。这给了我一些好处。最重要的是,它避免了在大量上传过程中中途死亡。它还为我提供了一个存储META文件的地方,并且所有构建文件都自动存档(所以我可以直接返回任何构建)。脚本还记录更新(因此在日志流中有一个条目,我可以看到pre-和post-),并启动所有的守护进程(我使用daemontools,因此“svc -t”)。所有这些都最好放在目标机器上。

另一个问题是数据库更改。我保留了一个DB模式的主脚本,每当模式发生变化时,我都会更新这个脚本。每一种变化也会变成一种变化。SQL脚本,该脚本与构建一起上传到暂存区域。该脚本作为安装脚本的一部分运行。

考虑fazend.com,这是一个免费的托管CI平台,它可以自动化配置和安装过程。您不需要设置版本控制、错误跟踪、CI服务器、测试环境等。一切都是按需完成的。

我主要是一个系统管理员,但有时我也编写PHP代码。作为一个副项目,我创建了一些脚本,这些脚本将使使用Jenkins建立一个完整的PHP CI环境变得简单而轻松。它还为您运行一个示例项目,以便您可以看到每个构建步骤是如何配置的。

如果你想尝试一下,你只需要一个Debian/Ubuntu的盒子和shell访问权限。

http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci

为我的回答添加一些内容:

你可以使用Ansible简单地为PHP设置一个Jenkins CI。自v1.4以来,它支持角色,你可以从他们的galaxy.ansibleworks.com社区网站下载,它将为你做繁重的工作。它被称为jenkins-php

PHPTesting PHPCI这是一个很好的,用php内置的持续集成服务器。

另外,它是免费和开源的。:)

它有许多插件..

PHPCI包括集成插件:

  • Atoum
  • Behat
  • 篝火
  • Codeception
  • 作曲家
  • 电子邮件
  • 咕哝着说
  • IRC
  • PHP
  • 线头
  • MySQL
  • PDepend
  • PostgreSQL
  • PHP代码嗅探器
  • PHP复制/粘贴检测器
  • PHP规范
  • PHP单位
  • Shell命令
  • Tar / Zip

我建议使用Jenkins http://jenkins-ci.org/,它是免费的,也是开源的。

它的设置非常简单,可以在多个平台上工作,并且可以很好地与其他持续集成工具集成,如SonarQube (+ SQUALE)来测量技术债务,以及用于测试自动化的Thucydides。

我强烈建议使用GIT或GIT Hub来进行版本控制,而不是SVN。从我的角度来看,这只是一个更好的版本控制系统,它将帮助你在以后扩展你的开发工作。

由于您主要使用PHP项目,您可以使用一些其他工具。

PHPUnit——用于单元测试

PHP CodeSniffer -检查编码标准

PHP依赖-显示你的PHP代码依赖关系

XDEBUG -用于性能测试

所有这些工具都可以被Jenkins作业触发,并有助于提高代码的质量和性能。

祝你好运!