写点什么

用户实例: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:372183
用户头像

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

关注

评论

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

你以为的你以为未必是你以为的

Bruce Talk

敏捷 随笔 Agile 引导和教练

网络攻防学习笔记 Day71

穿过生命散发芬芳

网络攻防 7月日更

【Flutter 专题】90 图解 Dart 单线程实现异步处理之 Future (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

实时音视频技术全栈攻略|寻找C站宝藏

liuzhen007

音视频 7月日更

模块八作业

Presley

Facebook工程经验--PCIe故障监控和修复

俞凡

架构 大厂实践

架构实战训练营 - 模块八课后作业

Johnny

架构实战营

智能重排序在推荐场景中的应用(三十四)

Databri_AI

推荐系统 排序 智能

以产业区块链提升数字化转型质量

CECBC

10条让开发者受益终生的编码原则

Jackpop

密码你真的了解吗

卢卡多多

7月日更

性能测试框架对比初探

FunTester

性能测试 接口测试 测试框架 测试开发

Hadoop 入门教程

若尘

大数据 hadoop

Python OpenCV 之图像金字塔,高斯金字塔与拉普拉斯金字塔

梦想橡皮擦

7月日更

一文掌握Java TreeMap与HashMap

Jackpop

模块一作业

Always

架构实战营

京东智造云:在世界人工智能大会上,听到的工业智能生长的声音

脑极体

高性能架构

编号94530

Java 架构设计 高性能

Javascript 的工作原理:引擎、运行时和调用堆栈概述

devpoint

JavaScript V8 7月日更

Apache Flink 漫谈系列 —— 概述

云祁

flink 7月日更

7款神器,让程序员幸福感暴增!

Jackpop

🏆【CI/CD技术专题】「Maven插件Docker系列」使用Maven插件构建Docker镜像的方法

洛神灬殇

Docker maven 7月日更 Plugin

Redis - Cluster - 源码阅读(二)

旺仔大菜包

redis

市场总局禁止虎牙斗鱼合并:抵制互联网行业垄断行为

石头IT视角

区块链+游戏资产所有权,将如何激活游戏经济的发展?

CECBC

架构实战营 模块二作业

孫影

架构实战营 #架构实战营

性能框架哪家强—JMeter、K6、locust、FunTester横向对比

FunTester

性能测试 接口测试 测试框架 测试开发

领域驱动设计到底在讲什么?

escray

学习 极客时间 7月日更 如何落地业务建模

Goroutine 是如何运行的

Rayjun

调度器 Go 语言

Go 学习笔记之 结构体

架构精进之路

Go 语言 7月日更

PowerShell 正则表达式

耳东@Erdong

PowerShell 7月日更

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