65.9K
CodeProject 正在变化。 阅读更多。
Home

我们如何停止浪费时间在手动部署上

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2015年1月8日

CPOL

5分钟阅读

viewsIcon

17052

与其写我们自己的文章,不如我们分享一个真实的、有真实环境的、来自真实开发者的故事。Shaw Innes 是 Octopus Deploy 的用户。

引言

软件开发中最大的时间杀手之一就是部署(和环境管理)。我最近参与了一些大型项目,人们每周花费大量时间来创建、维护和部署软件包。这些时间本可以花在修复 bug 上,或者通过为软件添加功能来为业务创造价值。相反,他们却花费在手动执行和调整软件的安装,而且由于人为错误,往往还要承担额外的开销。

自动部署的另一个好处是,您可以非常有信心能够快速地对软件进行更改,并将其构建并部署到您的测试和生产环境中。您越早将代码行投入生产,就越早能为您的业务或客户带来价值。最近,我和我的同事 Sam ( http://thwaitesy.com/ ) 花了整个周末重构了一个大型的 Web 项目,使其更容易打包。然后,我们为该网站设置了一个自动部署流程。在此之前,部署过程每两周需要开发人员手动花费 1-2 天。现在,从代码签入到自动构建和部署到开发人员测试环境,大约只需要 10 分钟。我们不再每 14 天左右进行一次部署,而是每天进行 14 次以上!

随着 Microsoft Azure 网站和源代码集成功能的推出,我再也无法忍受手动部署网站了,而且对于绝大多数简单的网站项目来说,这是一个很好的选择。对于其他所有情况……有 Octopus Deploy

Octopus Deploy

在我以 Microsoft 为主导的开发生涯中,没有什么比 Octopus Deploy 更具革命性了。它是一款简单(且价格实惠)的产品,允许您为软件配置可重复且可配置的部署流程。Octopus Deploy 主要用于部署基于 Windows Server 的应用程序,如 Windows 服务、网站等,尽管它最近通过 SSH 支持了 Linux 部署(我猜 OS X 也可以)。繁重的工作由安装在目标机器上的一系列代理完成(为了与头足类主题保持一致,这些代理显然是“触手”——尽管你肯定会有超过 8 个)。

下面的截图显示了 Octopus Deploy 的主仪表板,您可以在其中快速概览您的项目(在左侧)和您的环境(在顶部)。您可以轻松地看到每个项目当前安装在每个环境中的版本,以及是否有任何部署失败或正在进行中。

应用程序包就是 NuGet 包,可选地附带一些额外的 PowerShell 脚本以帮助完成工作。在幕后,Octopus Deploy 可以通过作用域变量来存储和使用有关您应用程序的各种信息。这些变量可以根据您正在安装的环境、产品甚至具体机器进行替换,以适应部署流程。

这款产品的运作方式使其非常容易以敏捷的方式工作,快速更改部署流程或变量,并快速重新部署到环境,直到流程达到理想状态。一旦您对开发或集成环境(举例来说)的流程感到满意,就可以将部署提升到下一个环境(例如暂存或生产)。这个过程最大的好处是您无需手动执行任何操作,并且由于它是可重复的,随着您在各个环境中推进,您对生产部署的信心会越来越强,因为它经过了充分的测试。当然,这一声明的一个警告是,您需要使您的各个环境在架构上保持相对相似,以避免最终出现意外的变更。

企业功能

我在大型企业中采用 Octopus Deploy 时遇到的一个争论点是如何控制谁可以设置部署、设置变量以及随后将包部署到各种环境。虽然 Octopus Deploy 已经拥有出色的基于角色的安全系统一段时间了,但仍然存在能否强制执行特定部署必须经过适当的测试和 QA 环境的问题。在最近发布的 Octopus Deploy 版本(2.6 / 2014 年 12 月)中,他们增加了一个新的“生命周期”功能,它解决了这个问题,而且非常棒……*大多数*情况下。这个新功能唯一的缺点是它完全按照设计工作,我再也不能像以前那样偷偷跳过流程中的步骤了。可恶!

凭借这些灵活的安全选项和全面的审计功能,为开发人员和测试人员提供系统访问权限变得非常容易,这样他们就可以开发和测试自己的部署流程,而不必将任务推给运维团队。在工作中,我们已经给几个团队访问了我们的 Octopus Deploy 实例,每次我查看仪表板时,都有新应用程序被部署到开发和测试环境中。这真是太棒了。

可扩展性和集成

我在几家初创公司、开源项目和工作中都使用 Octopus Deploy。在各种场景和规模下使用它,我发现它几乎总能开箱即用。在少数情况下,基本产品默认无法执行部署,我总是能够通过添加“步骤模板”(http://library.octopusdeploy.com),添加一些自定义 PowerShell 或通过功能齐全的 REST API 来实现目标。

集成过程的最终示例是使用 JetBrains 的 TeamCity 来执行代码的自动构建,将其打包成 NuGet 包并推送到 Octopus Deploy 进行交付。一旦它进入 Octopus Deploy,您就可以执行自动或手动触发的部署,并调用 PowerShell 脚本来执行诸如发布到 HipChat 或 Slack 等操作。今天我克隆了 Slack 通知脚本,创建了我自己的通用 WebHook 方法(我稍后会在我的博客上发布)。

下一步是什么?

作为一项有趣的工作项目,我想将 Netduino 或 Arduino 与 Octopus Deploy 和这个(来自 Jaycar Electronics 的)按钮集成,这样我们就可以真正实现“一键式”生产部署。

有什么比让这个开关挂在墙上,让企业老板或 CEO(字面意义上)按下它来将他们的新网站部署到生产环境更酷(也更极客)的呢?我会弄清楚技术细节,并尽快发布一个帖子。保持冷静,并部署到生产环境。

如果您想亲自尝试 Octopus Deploy,请下载免费的 45 天试用版

© . All rights reserved.