为PHP项目设置部署/构build/ CI循环

我大部分时间都是独立的开发人员,主要负责一些大型的,基于PHP的项目。 我想专业化和自动化代码库变更的处理方式,并创build一个持续集成过程,使团队中的过渡工作成为可能,而无需做出根本的改变。

我现在正在做的是,我为每个项目都有一个本地testing环境; 我为每个项目使用SVN; 更改在本地进行testing,然后通过FTP传输到在线版本。 API文档是从源代码手动生成的; unit testing是我慢慢进入的东西,这还不是我日常工作的一部分。

我所设想的“构build周期”将会做到以下几点:

  • 经过本地testing后,变更集将被签入到SVN中。

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

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

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

  • 运行驻留在预定义位置的unit testing。 我被告知他们失败或成功使用电子邮件,RSS或(最好是)HTML输出,我可以抓住并放入一个网页。

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

  • 像代码指标,代码风格检查等东西现在不是我的主要重点,但从长远来看,他们当然会。 带来这个开箱即用的解决scheme是非常友善的看待。

我在寻找

  • 来自或处于类似情况的人员的反馈和经验 ,并成功实施了解决scheme

  • 尤其是,如何设置这个好的一步一步的教程和演练

  • 提供尽可能多的自动化的解决scheme,例如为每个新项目创build一个框架API,testing用例等。

并且

  • 产品推荐 。 我到目前为止所知道的是phing / ant的build设,和phpUnderControl或哈德森的报告部分。 我尽可能地喜欢他们,但我当然没有与他们的详细经验。

我在工作中饱受折磨 ,所以我对于简单的解决scheme有着强烈的倾向。 另一方面,如果一个function缺失,我会哭它太有限。 :)也欢迎点击解决scheme。 我也是商业产品的build议,可以使用PHP项目。

我的设置

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

赏金我接受的答案是我觉得会给我最多的里程。 这里有很多优秀的input,我希望我可以接受多个答案。 感谢大家!

我已经通过buildbot , CruiseControl.net , CruiseControl和Hudson 。 虽然我真的很喜欢CruiseControl *,但对于复杂的依赖案例来说,这太麻烦了。 buildbot不容易build立,但它有一个很好的光环(我只是喜欢python,就这些)。 但哈德森赢得了前三名,因为:

  1. 这很容易build立
  2. 这很容易定制
  3. 它看起来不错,并有良好的概述function
  4. 它有自己和所有安装的插件的点和点击更新。 这是一个非常好的function,我越来越感激

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

设置哈德森服务器

先决条件:

  • Java(1.5将服务你就好了)
  • 读访问subversion服务器(我有一个单独的帐户为哈德森用户)

从这里,只是:

java -jar hudson.war 

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

如果你转到可用的插件目录( http://localhost:8080/pluginManager/available ),你会发现支持上述任务的插件(默认情况下安装了Subversion支持)。

如果这样做让你胃口大开,你应该安装一个java应用服务器,比如tomcat或者jetty 。 安装说明适用于所有主要的应用程序服务器

更新 : Kohsuke Kawaguchi为哈德逊build造了一个windows服务安装程序

在哈德逊build立一个项目

下面的步骤中的链接假设位于http://localhost:8080的哈德森运行实例

  1. 从左边的菜单中select新的工作( http://localhost:8080/view/All/newJob
  2. 给工作一个名字并打勾在列表上Build a free-style software project
  3. 按“确定”将进入作业的configuration页面。 除了他们之外,所有的选项都有一个小问号。 按下此button将显示有关选项的帮助文字。
  4. 在选项组“源代码pipe理”下,您将使用Subversion。 Hudson同时接受url访问和本地模块访问
  5. 在选项组“构build触发器”下,您可以使用“轮询SCM”。 这里使用的语法是cron的语法,所以每5分钟轮询一次subversion版本库就是*/5 * * * *
  6. 构build项目的过程在选项组“Build”下指定。 如果你已经有了一个你需要的所有目标的ant build文件,那么你很幸运。 只要select“调用ant”并写入目标的名称即可。 该选项组支持maven和shell命令以及开箱即用,但也有一个可用于phing的插件 。
  7. 勾选“后期制作操作”中的其他构build操作,例如电子邮件通知或构build工件的归档。

为了设置哈德森没有插件的进程,你可以直接通过构build设置中的shell脚本来调用它们,或者你可以写你自己的插件

陷阱:

  • 如果你有它产生build设文物,记得定期后哈德森自己清理。
  • 如果您设置了20多个项目,请考虑不要将其构build状态显示为哈德逊的默认主页面

祝你好运!

你正在寻找的术语是“持续整合”。

这是一个使用GIT + phpundercontrol的人的例子: http ://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/

CruiseControl(这是一个CI服务器),可以使用托pipe的SVN / GIT作为源。 所以你甚至可以使用GitHub或Beanstalk或其他的东西。

那么你可以将它与以下types的软件整合:

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

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

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

你还想过项目pipe理和补丁pipe理吗?

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

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

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

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

它支持SVN,现在支持Git,它有一个很好的用户界面。 它可用于Linux,Windows和Mac,并可以独立运行在自己的Tomcat服务器上,这对于那些不喜欢花费数天的时间来设置他们的工具的人来说是非常棒的。 虽然看起来很贵,但作为一名独立开发者,我购买了10美元(10美元软件)的入门套件许可证。 这对于小团队来说很不错,值得一看。

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

另外,它的自由和开源。 🙂

它有一些插件

PHPCI包含集成插件:

  • Atoum
  • 贝哈特
  • 营火
  • Codeception
  • composer php
  • 电子邮件
  • 咕噜
  • IRC
  • PHP
  • 皮棉
  • MySQL的
  • PDepend
  • PostgreSQL的
  • PHP代码嗅探器
  • PHP复制/粘贴检测器
  • PHP Spec
  • PHP单元
  • Shell命令
  • 焦油/邮编

我主要是一个系统pipe理员,但有时我也编码PHP。 作为一个副项目,我创build了一些脚本,使用Jenkinsbuild立一个完整的PHP CI环境变得简单而轻松。 它还为您运行示例项目,以便您可以了解每个构build步骤的configuration方式。

如果你想尝试一下,你需要的是一个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社区网站下载的angular色,它将为你做很多事情。 它被称为jenkins-php 。

我会build议使用jenkinshttp://jenkins-ci.org/它是免费的,它是开源的。

这是非常简单的设置,在多个平台上工作,并与其他连续集成工具,如SonarQube(+ SQUALE),以衡量技术债务和Thucydidestesting自动化良好集成。

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

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

PHPUnit – 用于unit testing

PHP CodeSniffer – 检查编码标准

PHP Depend – 显示您的PHP代码依赖关系

XDEBUG – 用于性能testing

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

祝你好运,享受!

我不使用许多产品,甚至是你使用的产品types,但我会给你我的经验。

我运行与我的PROD环境平行的testing环境。 我本身没有本地testing。 如果太难以实现真正的testing环境,那么我修复了我的构build过程。 由于环境不同,我在本地testing中看不到这一点。 更新:我在本地做的唯一事情是在我上传任何东西之前运行“php -l”。 停止愚蠢的错误。

构build过程适用于当前工作空间中的任何内容,其中包括未提交的代码。 这不是每个人的一杯茶,但我会经常去testing。 在进行PROD之前,所有事情都已经完成。

我的一部分构build过程(类似于你的)创build了两个META文件。 一个包含最后(通常)100个变化,也给我当前的变更清单编号。 显示我安装了哪些更改。 另一个包含CLIENTSPEC(Perforce条款),它显示了我在这个版本中使用了什么分支。 这些一起给我可重复的构build。

我不直接构build到目标环境,而是构build到服务器上的临时区域。 我使用SSH,所以这是有道理的。 这给了我几个优点。 最重要的是,它避免了大量上传中途死亡。 它也给了我一个存储META文件的地方,所有的构build文件都会自动存档(所以我可以直接回到任何构build)。 该脚本还logging更新(所以在日志stream中有一个条目,我可以看到前后),并踢所有的守护进程(我使用daemontools所以“svc -t”)。 所有这些都在目标机器上更好。

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

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

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

  • 部署允许用户为登台和生产服务器创buildftp目标,这些服务器可以通过点击button来部署(包括指定修订和分支)
  • webhooks允许用户build立每个提交/部署调用的url,传递修改号,描述和用户等信息。 这可以用来更新文档,运行unit testing和更新更新日志。

我敢肯定还有其他的托pipe或自我托pipe的SVN服务器与这两个function,但豆茎是我有经验,它的工作非常,非常好

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

考虑fazend.com ,一个免费的托pipeCI平台,它自动configuration和安装程序。 您不需要设置版本控制,错误跟踪,CI服务器,testing环境等。一切按需完成。

Interesting Posts