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

问题描述 投票:198回答:9

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

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

php continuous-integration phing phpundercontrol
9个回答
75
投票

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

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

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

Setting up a hudson server

先决条件:

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

从这里开始,它只是:

java -jar hudson.war

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

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

如果你有胃口,你应该安装一个java应用服务器,如tomcatjettyInstallation instructions适用于所有主要应用程序服务器

更新:Kohsuke Kawaguchi为哈德森建造了一个windows service installer

Setting up a project in hudson

以下演练中的链接假定​​hmandon的运行实例位于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命令以及开箱即用,但也有一个plugin available for phing
  7. 在“Post Build Actions”中勾选其他构建操作,例如电子邮件通知或构建工件的归档。

要设置hudson没有插件的进程,您可以直接通过构建设置中的shell脚本调用它们,也可以使用write you own plugin

Pitfalls:

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

祝好运!


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
  • SCA
  • 等等

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

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

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

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

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

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


6
投票

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

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


5
投票

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

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

它有多个插件..

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

  • 原子
  • 营火
  • Codeception
  • 作曲家
  • 电子邮件
  • 地面
  • IRC
  • PHP
  • 皮棉
  • MySQL的
  • PDepend
  • PostgreSQL的
  • PHP Code Sniffer
  • PHP复制/粘贴检测器
  • PHP规范
  • PHP单位
  • Shell命令
  • 她/拉链

3
投票

我主要是一个系统管理员,但有时我也编写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


3
投票

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

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

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

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

PHPUnit - 用于单元测试

PHP CodeSniffer - 检查编码标准

PHP Depend - 显示您的PHP代码依赖项

XDEBUG - 用于性能测试

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

祝你好运,享受!


3
投票

我不使用许多产品,甚至不使用您使用的产品类型,但我会告诉您我的经验。

我和我的PROD环境并行运行TEST环境。我本身没有本地测试。如果将某些东西变成真正的TEST环境太难了,那么我就修复了我的构建过程。我没有看到本地测试的重点,因为环境不同。更新:我在本地做的唯一事情是在上传任何内容之前运行“php -l”。阻止愚蠢的错误。

构建过程适用于当前工作空间中的任何内容,其中包括未提交的代码。这不是每个人的一杯茶,但我会经常去测试。在去PROD之前一切都得到了承诺。

我的构建过程的一部分(与您的类似)创建了两个META文件。一个包含最后(通常)100个更改,并且还提供当前更改列表编号。这显示了我安装了哪些更改。另一个包含CLIENTSPEC(以Perforce术语表示),它向我展示了此构建中使用的分支。这些一起给我可重复的构建。

我不直接构建目标环境,而是构建服务器上的临时区域。我使用SSH所以这是有道理的。这给了我一些好处。最重要的是,它可以避免在大型上传过程中死亡。它还为我提供了存储META文件的位置,并且所有构建文件都自动存档(因此我可以直接返回任何构建版本)。该脚本还记录更新(因此日志流中有一个条目,我可以看到前后)并踢出所有守护进程(我使用daemontools这样的“svc -t”)。所有这些在目标机器上都更好。

另一个问题是数据库更改。我保留了数据库模式的主脚本,每次架构更改时都会更新。每个更改也会进入一个changes.sql脚本,该脚本随构建一起上载到暂存区域。该脚本作为安装脚本的一部分运行。


2
投票

我最近开始了同样的过程,并使用Beanstalk进行svn托管。

付费帐户有两个漂亮的功能(我认为从15美元开始):

  • 部署允许用户为登台和生产服务器创建ftp目标,可以通过单击按钮进行部署(包括指定修订和分支)
  • webhooks允许用户设置在每个提交/部署时调用的URL,传递修订号,描述和用户等内容。这可用于更新文档,运行单元测试和更新更改日志。

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

还有一个API,我想这可以用来将部署进一步集成到您的流程中。


2
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.