我目前正在考虑建立一个强大的CI &跨小型开发团队共享的项目的部署环境。目标是在测试方式、整体代码质量和部署方式上保持一致性。
我读过Jenkins, Sonar, Maven, Capistrano, Phing, ANT,…老实说,我在所有这些工具/技术中迷失了方向,希望您能验证我的理解,并给我一些实现这一目标的最佳方法的见解。
我已经设置到现在:
- Git:我们使用Git作为版本管理系统,并为所有需要CI工具分析的新开发提供一个分支"开发"。
-
Jenkins: Jenkins由GIT钩子(在开发分支上)触发,并将执行PHING脚本执行以下操作:
- Lint:验证PHP代码执行,代码分析器 PHPLoc:获取一些关于PHP代码的统计信息(复杂性,依赖性等)
- PDepend:代码分析(不确定与PHPLoc的区别) phpmd:混乱检测器(未使用的参数,复杂的代码…)
- phpcpd:检测复制粘贴代码
- PHPcs: validate coding standards Phpdox:生成PHP文档
- Php_Codebrowser:生成一个可浏览的PHP代码表示,并突出显示违规…PHPUnit:运行PHP测试
Jenkins然后使用声纳运行器将所有报告/数据发送给声纳。
Sonar正在收集所有这些数据,将它们存储在数据库中,该数据库提供了一种分析应用程序代码随时间演变的方法。它也以比Jenkins更好的方式显示信息
- 自动部署到QA:当构建脚本成功(基于测试成功)时,我想自动部署到QA环境。这将触发QA提取正确数据的过程,对DB进行更改,并可能清理文件/文件夹&权限设置。
- 自动部署到PROD:这应该与上面相同,但基于主分支。我们还应该在部署后在该PROD环境上添加另一轮测试。
工具检查
- Git:不需要解释这个,这都是关于版本控制的
- Jenkins: CI工具,用于自动构建(代码验证+测试)
- Sonar:报告工具(随时间可视化构建数据)
- Maven:不确定这个。它是部署中缺失的部分吗?或者其他报告工具? Capistrano:部署工具
您的输入:-)
- 你对我的CI整体设置的看法(有意义吗,我使用了正确的工具吗?)
- 根据您的经验,部署的最佳工具是什么?
- 詹金斯是一种"调度"在这个整体CI/部署模式是触发部署也吗?如果是,我认为有可能触发一些基于构建状态的行动(成功/失败)?
整体看起来不错。我个人没有使用过Sonar(但知道它)或Capistrano(甚至从未听说过这个),所以不能评论它们。
Maven是一个依赖、构建和部署工具,主要用于Java项目。你已经在用Jenkins处理"构建"了,所以不用担心Maven。至于部署,我在这里写了一个非常详细的解释如何部署Jenkins构建。Jenkins完全有能力完成你的部署,所以为什么要费心去添加另一个工具呢?您唯一需要的是一个bash(或批处理,取决于您的环境)脚本来获取PHP文件(我建议将它们作为构建作业的一部分进行压缩),并将它们复制/部署到远程服务器上。
如果你有更具体的问题,请直接问。
据我所知,有一些用于自动部署的服务,它们更容易配置。例如,它可以集成到Dropbox并自动部署代码到repos/live,即使有几个开发人员正在开发它。例如:http://unbouncepages.com/the-magicbox/