自动化您的网站制作测试

马克很兴奋。再多一张关门的门票,他可以提前在湖上度过一个周末。只有他和鱼:没有Wi-Fi,没有IDE,没有客户会议。将修补三行代码和错误。 Git推送和新代码将在线,客户端会很高兴。简单。

Mark加载了他的本地开发站点以确认这三行修复了这个bug。成功!他写了一条快速提交消息并将代码推到了链条上。当他关上笔记本电脑的盖子时,马克笑了笑,已经在思考他为旅行所需的最后一分钟物品。下一站:自由!

除了现在生产的代码只能在Mark的机器上使用。该项目所需的库已经意外地gitignore-d,虽然很高兴为Mark运行,但在部署期间从未进入服务器。该网站更新,崩溃,当客户恐慌时,Mark的团队立即发出红色警报。整个周末都需要追踪丢失的文件。星期一早上,马克回到了一个愤怒的开发团队,一个愤怒的客户,并突然想要恢复他的简历。

恐怖故事

这个故事可能看起来很虚构,但除了“马克”之外,我和大多数开发人员一样经历了很多次,从团队的两个方面来看。

但缺乏解决方案。我们尝试教授良好的行为,而不是对基础设施进行真正的改变。作为一项政策,所有代码必须经过同行评审才能在售票系统中进行核对。星期五没有进行任何部署。工程师必须获得在主分公司工作的权利。

这些保护措施是解决问题的第一步。不幸的是,人类会犯错误,在截止日期临近时会跳过步骤,并且口述的行为习惯通常被证明仅仅是通常无法阻止流血的创可贴。

持续集成

更好的解决方案是从等式中消除人为错误并自动化这些预部署最佳实践。通过单元测试,我们可以绝对确保代码中的任何更改都不会在发布之前破坏构建。触发白页死机或服务器端5XX错误的错别字成为遥远的记忆。打印行动表格上方的堆栈痕迹已成为过去。要求单元测试有助于确保项目在任何事情离开开发人员的机器之前正常工作 - 大部分时间。

单元测试非常适合自动确保一台机器上代码的完整性,但是它没有修复上面说明的“它对我有用”的问题。相反,我们需要将测试代码分发给整个团队,同时确保它实际上在多个环境中运行。

输入詹金斯,一个开源的持续集成服务器。感谢Jenkins,一个公共构建服务器位于团队和生产环境之间,在它们上线之前自动测试每个提交。 Jenkins还可以在代码质量方面强制执行普遍接受的最佳实践。

这个怎么运作

代码可以像本地需要一样破坏,但是一旦提交被推送到中央存储库,Jenkins就会自动运行构建过程。

Jenkins运行单元测试来检查代码功能。它还可以运行代码linting工具来分析代码样式和性能。它甚至可以生成API文档,因此团队(或外部贡献者)可以跟上项目进度。

确定自动化的内容

在任何工作流程都可以自动化之前,您必须建立一致的操作清单。并非所有事情都必须立即自动完成:您的清单可能就像运行代码linting工具一样简单。从最常执行的任务开始。他们消耗的时间最多,并将成为最大的早期自动化赢家。

对于PHP项目,此任务列表可能包括:

  • 运行项目的所有单元测试
  • 运行PHP_CodeSniffer以确保代码质量
  • 运行phpDocumentor为您的API生成文档
  • 推送到GitHub上的gh-pages分支
  • 运行Selenium测试套件以验证UX交付
  • 将代码部署到生产数据库

如果Jenkins在上述任何步骤中遇到失败,它可以 - 而且应该 - 立即停止构建并通知团队出现问题。

巡回詹金斯

虽然上面构建过程的第一步可能是测试,但自动化的第一步当然是安装Jenkins。为此,我的团队已经组建了一个简单的工具,可以快速构建和部署一次性Jenkins服务器:巡回詹金斯。由于某些通用配置脚本,该工具可以在本地(由Vagrant服务器提供支持)或远程计算机上运行。

在本地运行

要在本地运行Itinerant Jenkins,只需:

该项目将使用Vagrant在本地计算机上下载并创建新的Ubuntu VM。然后它启动Ansible供电的配置系统来安装Jenkins。可以将Jenkins配置为以任何语言运行任何框架的测试。但是,开箱即用,巡回詹金斯项目为您提供:

  • PHP 5.6(CLI)
  • XDebug(xdebug.org)
  • 作曲家(getcomposer.org)
  • PHPUnit(gphpunit.de)
  • PhpDocumentor(phpdoc.org)

配置程序完成后,您将在http://jenkins.dev:8080上运行一个功能齐全的Jenkins服务器。巡回Jenkins预安装插件,以支持PHP单元测试和代码覆盖报告!

远程运行

巡回Jenkins还允许您轻松启动远程构建服务器。如果您已经在本地克隆了存储库,那么您已经拥有了所需的一切。只需在某处找到一个Ubuntu服务器(Rackspace,Digital Ocean,Linode等),并确保您拥有一个具有无密码sudo功能的用户帐户。

接下来,从您的Itinerant Jenkins目录运行以下命令:

bin / deploy {user} @ {host}

巡回Jenkins将使用SSH将Vagrant使用的相同Ansible配置工具推送到远程服务器,并将启动远程构建以为您安装Jenkins及其工具。

部署脚本完成后,您将在http:// {host}:8080上运行一个功能齐全的Jenkins服务器。

下一步

巡回詹金斯意味着一次性,但詹金斯本身是不可或缺的。您可以使用该工具在任何地方,任何团队和任何项目中快速配置和部署构建服务器。

一旦Jenkins启动并运行,您的下一步就是逐步完成构建检查列表,并将每个任务的负担从团队中转移到新的队友身上。人类可以而且将会忘记步骤 - 并打破过程中的构建。

然而,詹金斯每次都毫无怨言地完成每项任务。通过持续集成,您可以向每个开发人员的梦想迈进一步:只发送无错误的代码。

埃里克曼恩

Eric Mann是首席网络工程师10up。他的专业领域包括HTML,CSS,PHP,JavaScript(浏览器和Node.js)和WordPress。本文最初发表于273期网络杂志

喜欢这个?阅读这些!



翻译字数超限