写点什么

用户实例:DubDubDeploy

  • 2013-04-22
  • 本文字数:2786 字

    阅读完需:约 9 分钟

编辑按:最初 DonteOrmsby 联系我们的时候,仅仅是写了一封友好的信,说他发现一个非常棒的工具能简化 ASP.Net 的网站部署,并认为我们的读者可能感兴趣。经过进一步交谈,我们认为介绍 DubDub 部署最好的办法就是让 Donte 来给读者讲述他亲身所经历的故事。

如果你知道某个产品对你非常有帮助而且愿意分享你的经验,请务必通知我们。不论是正式还是非正式的用户实例,我们都欢迎。 JonathanAllen ,NetQueue,主编。

我们的故事始于 2010 年下半年,本地一家金融机构的软件开发部门。作为项目组的软件工程师,我当时不仅负责我们各个应用的编码,同时也管理应用服务器和部署网站。我们当时的系统环境还很不成熟,因此很难通过源代码控制来追踪所有的应用,以及部署到不同的服务器上。

我们拥有相当多的互联网应用,从内部应用,到公开网页,再到面向客户的门户。而理所当然,每个应用又有多个环境和服务器,通常来说生产、测试和开发都会有一到两个环境,有时多些,有时少些。应用部署是我们的主要困难之一,除了如此多的环境,同时还要处理基础设施问题。

每个开发人员都有 9 个登录窗口–4 个不同的域帐户(涵盖 3 个域),和 5 个独立服务器的非域帐户。部署到服务器意味着使用一个账户登录到编译服务器,然后用另一个账户登录到目的服务器。永久映射磁盘在当时并不可行,因为有太多事情需要处理–几十个应用程序位于不同位置,其中许多明显没有基于服务器名或目录。

还有并不是每一个人都愿意去记住这数十个应用的位置,因而这些任务就落到了我们几个被选中的人身上。由于采用敏捷模式,代码总是快速更新,并被部署到不同的环境中,即便是生产环境也经常被更新。每天我都得不断放下手里的工作去部署某一应用,这意味着我要记住这个应用的所在地,登录到 UNC 共享或者映射新磁盘,然后手动备份文件,手动部署新代码。而我发现当我不在办公室时,大家都害怕部署应用,或是记不住密码,又或者根本不知道他们应该往哪里放文件或取文件,总之,完不成部署这件事。

在不间断打扰,延迟部署代码到测试环境上,以及人为将代码发布到错误路径所带来的生产力的丢失之间,我们每星期都浪费了好几十个小时,这很容易就造成每年数百个小时宝贵开发时间的浪费。

在认识到问题后,我的第一个尝试是建立一系列批处理文件,它们可以自动根据给定的应用和环境映射磁盘。但这仍意味着要记住 9 个密码,并保证所有用户账户状态良好(因为某些原因,在我们这不总是成立)。这个方案帮了点小忙,但是我们迫切需要一个更持久的解决方案,一个让所有人都放心使用的方案。

后来我们就发现了当时仍处于预览版的 DubDubDeploy。这个产品保证在网间通过 HTTP 而不是以文件系统的方式来部署文件。这也意味着我们的所有网络访问和用户权限问题都不复存在了。我们当时就决定一试。哪怕我们只能节省出一小部分浪费掉的时间和精力,其免费性质也让它物超所值。

DubDubDeploy 只需要在编译以及目标 web 服务器上做一个小型安装,配置也非常简单。我们只需要定义应用可以拷贝到哪里,及哪个用户可以运行它即可。在完成配置之后,备份和部署就从痛苦的多步流程转变成一次轻松点击。

并且它本身还包括了一个 Nant 脚本生成器以及 CruiseControl.NET 项目配置生成器。我们当时已经在使用这两个产品了,但生成的样本给我们一些启示以如何提高我们脚本的质量。对于任一正式的项目都必须要有一个坚固的编译流程。任何能帮助提高编译策略的东西,我都欢迎。

算上所有的应用及环境,我们项目组要处理 40 多个常用应用部署位置。现在 DubDubDeploy 把一切都按应用程序和相应环境记录起来,而不用每次都去回忆或查找。如果你想部署内部应用到 QA,只要打开面板,下拉到 Intranet,点击 QA 服务器下的部署按钮。几秒钟之后,你的应用就部署完成,你就可以继续你的工作了。正因它如此简单,现在每个人都能负责自己的部署,而无须依赖别人。

使用过程中我们还发现了其他的优点。自从部署变成服务器到服务器,以前从家使用 VPN 部署代码所要忍受痛苦而漫长的过程,现在变成了和在办公室一样简单。DubDubDeploy 整合了 CruiseControl.NET,我们可以在部署之前实时监视编译状态。在编译完成时,应用状态将变成绿色,这就说明我们可以安全部署了。

就在一瞬间发生如此之大的变化,现在人人都能部署了。无需任何工作,甚至不需要知道文件实际位置。发布一个应用的耗时从几分钟缩短到 10 秒以内。而在 DubDubDeploy 中增加一个分支也只需几分钟,甚至比手动部署一个应用还快。我们知道了我们在往正确的轨道上发展。

不幸的是,我们不允许在生产环境上运用 DubDubDeploy。它必须要通过 HTTP 和目标服务器建立一个新的通信链路,但我们公司不允许在服务器上这样操作。即使这样,我们还是节省出大量浪费在开发和测试上的时间,而这也恰恰是我们浪费的绝大部分时间。

现在,我们不再浪费时间处理许可和服务器相关问题,我们有了更多从事实际的开发工作的时间。随着生产力的飙升,开发者的心情也有了改善。而作为一个开发者,我总是倾向于编码或创造一些酷的新玩意,而非重复性工作或是维护。拥有更多编写代码的机会对每个人都是一种胜利。

由于这个产品当时还是预览版,功能仍就比较少。我们向他们提出增加一些新功能,其中有一些很快就被实现了。现在 DubDubDeploy 可以快速找出源目录和目标目录间的不同,并且只更新有变化的文件,把部署时间从 10 秒减少到 2 秒。同时我们也需要让创建用户更为简单:用户无须自己去设立安全限制,只须配置一个 AD 组,也不再为用户安全而费心。

尽管该产品还很新,其 UI 也比较粗糙,但它却作出了很大的帮助。我认为当它拥有更多新特性后,它将会更有帮助。除了更好的用户体验,DubDubDeploy 团队也正在策划新的功能,比如,脚本化部署,FTP 部署,通过集成源代码控制来部署分支的代码,和 IIS 的整合。该团队对于意见和建议的反应非常灵敏,针对 DubDubDeploy,我们已就发现的更多潜在用途,与开发团队进行了沟通,我们希望能够在下一个主要版本中看到这些改进。

在使用 DubDubDeploy 来管理我们的部署几个月后,我们知道我们已经不可能回头。手动部署,即使是在简单的环境,也已经不合潮流。

关于作者

我叫Donte Ormsby,毕业于亚利桑那大学,主修经典这门学科。对于那些不熟悉该课程的学习的人,该专业是一门从古埃及,罗马和希腊的建筑,文学,艺术立场来研究他们文化的学科。

当时我完全不知道我的学业将会对我目前职业造成如此之大的影响。学习经典其本质是研究人的本性。而 Web 开发,其核心是研究人的行为。创建一个网站并不只是创造好看的界面和代码。

作为一个 Web 开发者,如果你的任务是为企业和非营利组织以互联网为媒介来创造更多的机会,那你应该更多地关注你的创造将会给最终用户带来怎么样的效果。我个人来说,目标很简单,设计简单漂亮的网站,最终把消费者带到客户的门前。

查看英文原文: A User’s Story: DubDubDeploy

2013-04-22 09:372186
用户头像

发布了 39 篇内容, 共 13.4 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营 - 第六周 - 作业

韩挺

ARTS - Week 5

Khirye

ARTS 打卡计划

没内鬼,来点干货!volatile和synchronized

Kerwin

Java volatile synchronized

当我们在谈架构时,我们谈的是什么?

冯文辉

架构 企业架构 系统架构

Docker网络学习第一篇:Linux虚拟网络

Lazy

Docker Linux 网络

【计算机网络】你需要知道的链路层知识

烫烫烫个喵啊

计算机网络 链路层 交换机

程序员的时间管理

Kerwin

程序员

设计模式总篇:从为什么需要原则到实际落地(附知识图谱)

Kerwin

Java 设计模式

6 个珍藏已久 IDEA 小技巧,这一波全部分享给你!

楼下小黑哥

Java IDEA

5万字、97 张图总结操作系统核心知识点

苹果看辽宁体育

操作系统 计算机

30岁+程序员职场攻略:找到自己的“职业锚”乘风破浪

华为云开发者联盟

程序员 AI 开发者 职场

纯CSS实现自定义单选框和复选框

爱嘤嘤嘤斯坦

CSS Java 编程语言 标签

秒懂云通信:通信圈黑话大盘点

阿里云Edge Plus

云通信 通信云

因为 Django ORM update,我今天差点「从删库到跑路」

AlwaysBeta

数据库 django 编程 程序员

Hello!GitHub 好用好玩值得收藏的开源项目集合~

Kerwin

开源

疫情年逆风翻盘

Kerwin

程序员

日记一则

progyoung

简述 CAP 原理

不在调上

关于如何判断一个list是否为空的思考

Leetao

Python Python基础知识 列表

Mybatis执行流程浅析(附深度文章推荐&面试题集锦)

Kerwin

Java mybatis

week6 总结

不在调上

开发框架文档体系化的思考

vivo互联网技术

框架开发

一张PDF了解JDK10 GC调优秘籍-附PDF下载

程序那些事

Java jdk JVM GC JDK10

Docker网络学习第二篇-认识iptables

Lazy

Docker Linux 网络

Elasticsearch从入门到放弃:再聊搜索

Jackey

elasticsearch

没内鬼,来点干货!SQL优化和诊断

Kerwin

MySQL

redis系列之——一致性hash算法

诸葛小猿

redis 一致性hash redis集群

SpringBoot代码生成器

Kerwin

Java 开源

nginx在重定向时端口出错的问题

烫烫烫个喵啊

nginx

前端杂记-&&和||

阡陌r

JavaScript && ||

Java8——方法引用

Java旅途

java8 方法引用

用户实例:DubDubDeploy_DevOps & 平台工程_Donte Ormsby_InfoQ精选文章