在 CI 环境中自动部署 PHP (Jenkins)

我目前正在考虑为一个小开发团队共享的项目建立一个强大的CI和部署环境。目标是在测试方式、整体代码质量和部署方式方面实现一些一致性。

我读过关于詹金斯,声纳,Maven,Capistrano,Phing,ANT,...说实话,我在所有这些工具/技术中迷失了方向,希望您验证我的理解,并就实现这一目标的最佳方法给我一些见解。

到目前为止,我已经设置了什么:

  • Git:我们使用 git 作为版本控制系统,并为需要 CI 工具分析的所有新开发提供分支“开发”。
  • Jenkins:Jenkins 由 GIT 钩子(在开发分支上)触发,并将执行 PHING 脚本执行以下操作:

    • Lint:验证PHP代码执行,代码分析仪
    • PHPLoc:获取有关PHP代码的一些统计信息(复杂性,depedency..)
    • PDepend:代码分析(不确定与PHPLoc的区别)
    • phpmd:混乱探测器(未使用的参数,复杂的代码...)
    • phpcpd:检测复制粘贴代码
    • PHPcs:验证编码标准
    • Phpdox:生成 PHP 文档
    • Php_Codebrowser:生成 PHP 代码的可浏览表示形式,其中包含违规突出显示...
    • PHPUnit:运行 PHP 测试

    然后,Jenkins将所有报告/数据发送到Sonar,并解耦sonnar-runner。

  • Sonar正在收集所有这些数据,将它们存储在数据库中,该数据库提供了一种分析应用程序代码随时间变化的方法。它还以比 Jenkins 更好的方式显示信息。

缺少块

  • 自动部署到 QA:我想在构建脚本成功时自动部署到 QA env(基于测试成功)。这应该触发在QA上提取正确数据的过程,对数据库进行更改,以及潜在的文件/文件夹清理和权限设置。
  • 自动部署到 PROD:这应该与上述操作相同,但基于主分支。我们还应该在部署后对该 PROD 环境添加另一轮测试。

工具回顾

  • Git:无需解释这个,这一切都与版本控制有关
  • Jenkins:CI工具,可自动执行构建(代码验证+测试)
  • 声纳:报告工具(可视化随时间变化的构建数据)
  • Maven:不确定这个。它是部署中缺少的部分吗?还是其他报告工具?
  • Capistrano: deployment tool

您的输入:-)

  • 你对我对CI的整体设置的看法(这有意义吗,我是否使用了正确的工具?
  • 根据你的经验,什么是最好的部署工具?
  • 由于 Jenkins 是整个 CI/部署架构中的“调度员”,它是否也是触发部署的架构?如果是,我假设可以根据构建状态(成功/失败)触发一些操作?

非常感谢您的时间和帮助!


答案 1

整体看起来不错。我个人没有使用过Sonar(但意识到它)或Capistrano(甚至从未听说过这个),所以不能对这些评论。

Maven 是一个依赖、构建和部署工具,主要用于 Java 项目。你已经在用 Jenkins 负责“构建”了,所以不要担心 Maven。

至于部署,我在这里写了一个非常详细的解释,如何部署 Jenkins 构建。Jenkins 完全有能力完成你的部署,那么为什么要费心去添加另一个工具呢?您唯一需要的是一个bash(或批处理,取决于您的环境)脚本来获取您的PHP文件(我建议将它们作为构建作业的一部分压缩)并在远程服务器上复制/部署它们。

如果您有更具体的问题,请询问。


答案 2

据我所知,有一些用于自动部署的服务,它们更容易配置。例如,它可以集成到Dropbox中,并自动部署代码以存储库/生活,即使有一些开发人员正在研究它。示例:http://unbouncepages.com/the-magicbox/


推荐