话说回来,前段时间,我们部门急着要部署那个叫做ETO的重要程序,版本必须是3.1.2。这玩意儿每次更新都跟打仗一样。问题出在哪儿?出在那个安装包的地址上。每次新人来了问我要包,我都是把旧的邮件翻出来,上面写着一个局域网路径,结果十次有九次是空的。
这回我彻底火了。为啥火了?因为我早上起来一看,好家伙,生产环境的A服务器上的老版本突然出了个小毛病,得赶紧回滚或者直接升到新版本。我当时就想着,把那个最新的包直接推过去不就完了?结果我翻遍了我电脑里的记录,找到了上次留下的那个“永久地址”,点进去一看:啥都没有!
第一步:追踪那个四散的包,发现一团浆糊
我当时真是气得牙痒痒。那个包到底在哪儿?我先是问了一圈开发小李,他甩给我一个云盘地址,上面赫然写着“ETO_V3.0_最终版”。最终版?笑话,我们现在都3.1.2了。我又跑去问运维老张,老张说他那儿的包是从测试环境copy过来的,他自己也不知道是不是最新的。这不就是一团浆糊吗?每个人手里的包都不一样,版本号对不上,导致各种稀奇古怪的问题。
我坐下来,决定必须把这个根源问题解决了。我知道,这软件的正式版本更新,肯定有一个源头。我锁定了给我们提供这个软件的公司那边发来的原始邮件。那封邮件我翻了半小时,终于找到了。邮件里说得很清楚,他们每次更新,都会在X服务器上的特定目录下放一个压缩包,并且会更新一个TXT文件,写清楚版本号和校验码。但问题是,这个地址从来没人维护,也没人告诉新来的同事。
我赶紧登录了那个X服务器,对照了最新的TXT文件,下载了我们需要的3.1.2版本安装包。光是下载这个包,就花了我两个小时,因为网络慢得像蜗牛爬。
第二步:统一更新地址和建立管理规范
包是拿到了,但这治标不治本。下次更新,这个问题还会出现。我马上联系了IT那边,请求开通了X服务器上那个特定目录的只读权限,但不是给所有人,而是给一个固定的“资源共享账号”。这样,即便有人知道地址,也只能看,不能瞎改动或者上传一些乱七八糟的东西。
我接着拉了一个表格,用最简单的Excel。这个表格里,我记录了我们从V2.5到V3.1.2所有版本的安装包名字、文件大小、对应的校验码以及它们在X服务器上的实际存放路径。我把所有旧的、错乱的安装包路径全部废弃了。以后所有人都只能通过我的这个表格来查阅和获取包,否则一概不认。
但光有表格不行,不能让大家每次都去手动操作。我写了一个简单到不能再简单的批处理脚本。这个脚本的核心功能就是两步:第一,连接到X服务器的固定路径;第二,把最新的那个压缩包下载到本地。脚本里面我甚至做了一个小小的版本判断,确保下载的是最新的包。我把这个脚本推给了所有需要使用ETO安装包的人,让他们以后需要最新包的时候,直接点这个脚本就行。这下好了,一键获取最新包,谁也别再找什么云盘、什么老邮件了。
一步,我跟部门领导申请了,未来所有ETO相关的更新包,必须由我这边来最终审核和入库。我创建了一个规范:新的安装包来了,我先下载下来,跑一遍测试机,确认没问题后,再上传到那个X服务器的固定位置,同时更新我的那个版本追踪表格。一切都流程化了。
第三步:我为什么要做这些基础工作?
你们可能觉得我管得太宽了,一个安装包地址至于这么折腾吗?至于!你们是不知道以前我经历过什么。
我以前在一家小公司,系统乱七八糟,维护全靠吼。那时候我管着的项目,因为一个底层服务的版本对不上,直接导致一个核心功能瘫痪了三天,领导当时把我骂得狗血淋头。后来我发现,那个版本号错乱的原因,就是因为运维小王用的包是半年前他在他个人电脑上存的。从那以后,我就养成了一个毛病:所有关键的部署资源,必须得由我亲自验证和集中管理。
现在我在的公司虽然稳定多了,有制度有流程,但这股“强迫症”还是留下来了。现在每天按时下班,工作稳定,双休不加班,很大程度上就是因为我把这些基础的工作都夯实了。要是基础架构又乱成以前那副德行,我看又要开始没日没夜地加班救火了。那时候哪有时间在这儿分享我的实践记录?
这回的ETO更新地址,我宁愿多花两天时间把它彻底理顺,也不想下个月再因为这个小事被半夜叫醒。一个安装包的小事,让我折腾了两天,但我觉得值了,至少以后没人能再搞砸这件事情了。