202

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

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

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

  • 在本地测试后,变更集会被签入 SVN。

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

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

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

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

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

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

我在寻找

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

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

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

并且

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

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

我的设置

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

赏金 我正在接受我认为会给我最多里程的答案。这里有很多优秀的输入,我希望我能接受多个答案。感谢大家!

4

9 回答 9

77

I've been through buildbot, CruiseControl.net, CruiseControl and Hudson. All though I really liked CruiseControl*, it was just too much of a hassle with really complex dependency cases. buildbot is not easy to set up, but it's got a nice aura (I just like python, that's all). But hudson won over the former three because:

  1. It's just easy to set up
  2. It's easy to customize
  3. It looks good and got nice overview functionality
  4. It got point-and-click updates, for itself and all installed plugins. This is a really nice feature, that I appreciate more and more

Caveat: I only ever used linux as base for the above mentioned build servers (CC.net ran on mono), but they should all - according to the docs - run cross-platform.

Setting up a hudson server

Prerequisites:

  • Java (1.5 will serve you just fine)
  • Read access to the subversion server (I have a separate account for the hudson user)

From here, it's just:

java -jar hudson.war

This will run a small server instance right off your console, and you should be able to browse the installation at your http://localhost:8080, if you don't have anything else running on that port in advance (you can specify another port by passing the --httpPort=ANOTHER_HTTP_PORT option to the above command) and everything went well in the 'installation' process.

If you go to the available plugins directory (http://localhost:8080/pluginManager/available), you'll find plugins for supporting your above mentioned tasks (subversion support is installed per default).

If that has whet you appetite, you should install a java application server, such as tomcat or jetty. Installation instructions are available for all major application servers

Update: Kohsuke Kawaguchi has constructed a windows service installer for hudson

Setting up a project in hudson

The links in the following walk-through assumes a running instance of hudson located at http://localhost:8080

  1. Select new Job (http://localhost:8080/view/All/newJob) from the menu on the left
  2. Give the job a name and tick Build a free-style software project on the list
  3. Pressing 'ok' will take you to the configuration page of the job. All the options have a little question mark besides them. Pressing this will bring up a help text regarding the option.
  4. Under the option group 'Source Code Management' you would be using Subversion. Hudson accepts both url access as well as local module access
  5. Under the option group 'Build Triggers', you would use 'Poll SCM'. The syntax used here is that of cron, so polling the subversion repository every 5 minutes would be */5 * * * *
  6. The process of building the project is specified under the option group 'Build'. If you already have an ant build file with all the targets you need, you're in luck. Just choose 'Invoke ant' and write the name of the target. The option group supports maven and shell commands as well out of the box, but there is also a plugin available for phing.
  7. Tick off additional build actions in 'Post Build Actions', such as e-mail notifications or archiving of build artefacts.

For setting up processes for which hudson have no plugins, you can either call them directly through a shell script from within the build setup, or you could write you own plugin

Pitfalls:

  • If you have it produce build artefacts, remember to have hudson clean up after itself in regular intervals.
  • If you have more than 20 projects set up, consider not displaying their build status as the default main page on hudson

Good luck!

于 2010-02-08T23:13:06.360 回答
23

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

这是使用 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/等。解决方案,因为它们将覆盖您的备份并保持其服务器运行,因此您可以专注于开发。

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

于 2010-02-02T14:35:08.747 回答
6

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

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

于 2010-02-05T00:24:27.873 回答
5

PHPTesting PHPCI这是一个不错的,内置在 php 中的持续集成服务器。

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

它有许多插件..

PHPCI 包括以下集成插件:

  • 阿图姆
  • 贝哈特
  • 营火
  • 密码接收
  • 作曲家
  • 电子邮件
  • 咕噜声
  • 国税局
  • PHP
  • 皮棉
  • MySQL
  • 依赖
  • PostgreSQL
  • PHP 代码嗅探器
  • PHP 复制/粘贴检测器
  • PHP 规范
  • PHP 单元
  • 外壳命令
  • 焦油/邮编
于 2014-05-14T09:26:58.537 回答
3

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

我与我的 PROD 环境并行运行 TEST 环境。我本身没有本地测试。如果很难将某些东西融入真正的 TEST 环境,那么我会修复我的构建过程。由于环境不同,我看不出在本地进行测试有什么意义。更新:我在本地做的唯一一件事就是在上传任何内容之前运行“php -l”。停止愚蠢的错误。

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

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

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

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

于 2010-02-09T10:37:04.957 回答
3

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

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

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

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

PHPUnit - 用于单元测试

PHP CodeSniffer - 检查编码标准

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

XDEBUG - 用于性能测试

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

祝你好运,享受!

于 2014-06-06T20:11:21.427 回答
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

于 2014-01-25T00:37:47.740 回答
2

I've recently begun the same kind of process, and am using Beanstalk for svn hosting.

There are two nifty features in the paid accounts (start at $15pm i think):

  • deployment allows the user to create ftp targets for staging and production servers, which can be deployed at the click of a button (inc specifying a revision and branch)
  • webhooks allow the user to set up a url that is called on each commit/deploy, passing across things like revision number, description and user. This could be used to update docs, run unit tests and update changelogs.

I'm sure there are other hosted or self-hosting svn servers with these two features, but beanstalk is the one i have experience of and it's working very, very well

There's also an API, which I imagine could be used to integrate deployment further in to your process.

于 2010-02-02T13:37:35.920 回答
2

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

于 2010-10-24T14:55:27.320 回答