我是一个孤独的开发者我的大部分时间,对一些大的,主要是基于PHP项目的工作。 我想专业化和自动化如何更改代码库进行处理,并创建一个持续集成的过程,使得在一个团队可以工作,而无需做出根本性的变化的过渡。
我在做什么现在的问题是,我对每一个项目的本地测试环境。 我使用SVN每个项目; 更改本地测试,然后转移到上线的版本,通常通过FTP。 API文档从源代码手动生成; 单元测试是什么我进入慢,这是没有我的日常工作的一部分。
“建设周期”我预想会做到以下几点:
一个修改被已被本地测试之后检查到SVN。
我开始构建过程。 该SVN HEAD版本的检出,如果有必要修改,并准备上传。
API文档就会自动生成 - 如果我没有把它设置了详细的是,使用一个默认模板,扫描整个代码库。
新修订通过FTP部署到远程位置(包括一些目录重命名,chmodding,导入数据库,和喜欢。)这是我已经喜欢phing非常多,但我很开放的,当然选择。
居住在预定位置的单元测试运行。 我被告知有关使用电子邮件,RSS或(最好)HTML输出,我可以抓住并投入网页的失败或成功。
(任选地)一个最终用户在一个预定义的位置“更改日志”的文本文件获取与提交消息的一个预先定义的部分被更新(“现在是可能的筛选既‘foo’和‘棒’的同时时间),与SVN提交消息,这可能包含更多的内部信息该消息不一定是相同的。
像代码度量代码风格检查等东西都不是我的主要焦点,现在,但长远来看,他们肯定会的。 带来这出的现成的解决方案是很慈祥的看着时。
我在寻找
并且
- 产品推荐 。 我所知道的,到目前为止是phing /蚂蚁的建设, phpUnderControl或哈德森为报告部分。 我都喜欢,据我所看到的,但我当然与他们没有细致的体验。
我泛滥成灾的工作,所以我必须对简单的解决方案强大的倾向。 在另一方面,如果一个功能缺失,我会哭泣它是太有限了。 :)点和点击的解决方案,欢迎了。 我也到商业产品的建议可以用PHP项目。
我的设置
我工作在Windows本地(7,要准确),大多数的客户项目上的LAMP堆栈上运行,往往在共享主机(=没有远程SSH)。 我找的,我可以在自己的环境中运行的解决方案。 我准备建立一个Linux VM对于这一点,没有任何问题。 只要他们提供所描述的所有方面,或有足够的灵活性,以与过程的其他部分进行交互托管解决方案是对我有意思。
赏金我接受,我觉得会给我最里程答案。 有很多优秀的投入在这里,我希望我能接受一个以上的答案。 感谢大家!
Answer 1:
我经历过buildbot , CruiseControl.net , CruiseControl的和哈德森 。 所有虽然我真的很喜欢CruiseControl的*,这只是太有非常复杂的依赖关系的情况下麻烦了。 buildbot不容易建立,但它有一个很好的光环(我只是喜欢蟒蛇,这是所有)。 但是哈德森赢得了前三种原因:
- 这只是容易成立
- 这很容易定制
- 它看起来不错,得到了很好的概述功能
- 它得到了指向和点击更新,自身和所有已安装的插件。 这是一个非常不错的功能,我就欣赏更多
警告:我只用过Linux作为基础上述构建服务器(CC.net跑单 ),但他们都应该-根据文档-跨平台运行。
建立一个哈德森服务器
先决条件:
- 爪哇(1.5将竭诚为您服务就好了)
- 读访问Subversion服务器(我对哈德森用户一个单独的帐户)
从这里,它只是:
java -jar hudson.war
这将运行一个小的服务器实例马上你的控制台,你应该能够浏览安装在您http://localhost:8080
,如果你没有别的事先在该端口上运行(可以指定另一个通过将端口--httpPort=ANOTHER_HTTP_PORT
选项于上述命令)和一切在“安装”过程顺利。
如果你去到可用的插件目录( http://localhost:8080/pluginManager/available
),你会发现支持您的上述任务的插件(颠覆支持每默认安装)。
如果有激起你的食欲,你应该安装Java应用程序服务器,如Tomcat的或码头 。 安装说明适用于所有主要的应用服务器
更新 : Kohsuke川口构建了一个窗口服务安装哈德森
建立在哈德逊项目
在下面的步行通过该链接假定位于哈德逊的运行实例http://localhost:8080
- 选择新的工作(
http://localhost:8080/view/All/newJob
)从左边的菜单 - 提供作业名称,并勾选
Build a free-style software project
名单 - 按“确定”将带你到作业的配置页面。 所有选项都有,除了他们一点点的问号。 按这将带来一些有关这个选项帮助文本。
- 在选项组“源代码管理”你会使用Subversion。 哈德森同时接受访问的网址以及本地模块访问
- 在选项组“构建触发器”,你可以使用“投票SCM”。 这里使用的语法是cron的,所以轮询Subversion版本库,每5分钟将
*/5 * * * *
- 建设项目的过程选项组“构建”下指定。 如果你已经拥有你需要的所有目标的Ant构建文件,你很幸运。 只要选择“调用Ant”和写入目标的名称。 选项组支持Maven和shell命令以及开箱即用,但也有一个可供phing插件 。
- 勾选中“后生成操作”的附加构建行动,如电子邮件通知或建立文物的归档。
有关设置流程,其中哈德森没有插件,您可以直接从构建安装程序中调用它们通过一个shell脚本,或者你也可以写你自己的插件
陷阱:
- 如果您有它产生建立文物,记得有哈德森清理后本身的定期。
- 如果你有超过20个项目设立, 不考虑作为显示哈德森默认主页的构建状态
祝好运!
Answer 2:
你正在寻找的术语是“持续集成”。
这里是谁使用GIT + phpundercontrol别人的例子: http://maff.ailoo.net/2009/09/continuous-integration-phpundercontrol-git/
CruiseControl的(这是一个CI服务器),可以使用托管SVN / GIT作为源。 所以,你甚至可以GitHub的使用它,或者青苗或别的东西。
然后,你可以整合与以下类型的软件:
- PHPUnit的
- PHP-codesniffer
- phpDocumentor的
- PHP的gcov
- PHPXref
- Yasca
- 等等
你也可以试试这个托管CI: http://www.php-ci.net/hosting/create-project
但请记住,这些工具需要定制支持,如果你自己融入其中。
你也想过项目管理和补丁管理?
您可以使用管理平台进行项目管理。 它集成了持续集成的支持,但仅作为客户端(不作为CI服务器)。
尝试使用托管SVN / GIT /等。 解决方案,因为他们将覆盖你的备份和保持他们的服务器上运行,这样你就可以专注于发展。
有关如何安装哈德森的教程,请参阅: http://toptopic.wordpress.com/2009/02/26/php-and-hudson/
Answer 3:
我使用Atlassian的竹持续集成服务器,我的主要PHP项目(与他们的其他产品一起,如鱼眼 (库浏览), JIRA (问题跟踪)和三叶草 (代码覆盖率))。
它支持SVN,现在支持Git和它有一个很大的用户界面。 它可用于Linux,Windows和Mac并可这是伟大的人(像我)谁不喜欢需要数天才能建立自己的工具),它自己的Tomcat服务器上运行的独立。 尽管它可能看起来昂贵,是孤独的开发人员自己,我购买的入门套件许可证$ 10(10 $通过软件)。 这是伟大的小团队,这是值得的样子。
Answer 4:
PHPTesting PHPCI这是一个建立在PHP不错,持续集成服务器。
此外,其自由和开放源码。 :)
它具有插件的数量..
PHPCI包括集成插件:
- Atoum
- 贝哈特
- 营火
- Codeception
- 作曲家
- 电子邮件
- 咕噜
- IRC
- PHP
- 皮棉
- MySQL的
- PDepend
- PostgreSQL的
- PHP代码嗅探器
- PHP复制/粘贴探测器
- PHP规格
- PHP单位
- Shell命令
- 焦油/ ZIP
Answer 5:
我主要是一个系统管理员,但有时我的代码PHP也是如此。 作为一个方面的项目,我创建了一些脚本,这将使它简单和方便使用詹金斯建立一个完全成熟的PHP CI环境。 它还可以运行示例项目给你,让你可以看到每个构建步骤是如何配置的。
如果你想尝试一下你需要的是一个Debian / Ubuntu的框和shell访问。
http://yauh.de/articles/379/setting-up-a-ci-environment-for-php-projects-using-jenkins-ci
要更新一些内容添加到我的回答:
您可以使用Ansible只需设置一个詹金斯CI为PHP。 由于V1.4支持,你可以从他们的galaxy.ansibleworks.com社区网站下载的角色,它会做繁重的你。 这就是所谓的詹金斯的PHP 。
Answer 6:
我会建议使用詹金斯http://jenkins-ci.org/它是免费的,它是开源的。
这是非常简单的设置,适用于多个平台,并与其他持续集成工具,如SonarQube(+ SQUALE)很好地集成测量技术债务和修昔底德的自动化测试。
我会强烈建议使用GIT或集线器GIT版本控制,而不是SVN。 从我的角度来看,它只是一个更好的版本控制系统,这将有助于你以后扩展您的开发工作。
既然你大多用PHP项目的工作也有可以使用一些其他的工具。
PHPUnit的 - 对于单元测试
PHP CodeSniffer - 检查编码标准
PHP依靠 - 显示你的PHP代码的依赖
Xdebug的 - 对于性能测试
所有这些工具并用詹金斯任务被触发,并与您的代码的质量和性能有帮助。
祝你好运和享受!
Answer 7:
我不使用的产品很多,甚至类型的,你使用的产品,但我会给你我的经验。
我运行parrallel一个测试环境,我PROD环境。 我本身没有本地测试。 如果实在是太难以得到soemthing成一个真实的测试环境,那么我解决我的构建过程。 我看不出在本地测试点,因为环境是不同的。 更新:我在本地做的唯一的事情之前,我上传任何运行“PHP -l”。 停止愚蠢的错误。
构建过程的工作原理与无论是在当前工作空间中,其中包括未提交的代码。 这不是茶,每个人的杯子,但我会经常检验。 一切都得到才去督促承诺。
我的构建过程(类似于你)的一部分,创建两个META文件。 一个包含的最后一个(典型值)100度的变化也给了我当前的变更表号。 该显示我安装了什么样的变化。 另含有这说明我到底是什么树枝被在此版本中使用的CLIENTSPEC(在Perforce中的术语)。 总之,这些给我重现的构建。
我不建直奔目标环境,但在服务器上的临时区域。 我用SSH所以这是有道理的。 这给了我一些优势。 更重要的是它避免了死亡经过大量上传一半。 这也给我来存储元文件的地方,所有的生成文件的自动存档(这样我就可以直奔回任何版本)。 该脚本还记录更新(所以日志流中的条目,我可以看到前置和后置)和踢所有的守护程序(我用的daemontools如此“SVC -t”)。 所有这些都是在目标机器上更好。
另外一个问题是DB的变化。 我把DB模式,这是我更新每次架构更改的主脚本。 每变化也进入一个changes.sql脚本,该脚本上传与构建的临时区域。 该脚本运行的安装脚本的一部分。
Answer 8:
我最近开始同一种工艺,并且正在使用青苗为SVN托管。
有在付费账户2个漂亮的功能(开始于$ 15pm我认为):
- 部署允许用户创建分期和生产服务器,它可以在一个点击按钮来部署FTP目标(INC指定修订和分支)
- 网络挂接允许用户建立一个名为每次提交/部署的URL,横跨东西像传递版本号,描述和用户。 这可以用来更新文档,运行单元测试和更新更改日志。
我敢肯定有这两个特征的其他托管或自托管SVN服务器,但魔豆是一个我的经验,它的工作非常,非常好
还有一个API,这是我想象可以用来部署进一步整合到你的进程。
Answer 9:
考虑fazend.com ,一个免费托管CI平台,它能够自动配置和安装程序。 你并不需要设置版本控制,缺陷跟踪,CI服务器,测试环境等,一切都按需求进行。
文章来源: Setting up a deployment / build / CI cycle for PHP projects