跳到主要内容
弗美科技
技术分享

Jenkins 把上线从手动改成脚本

以前上线是一张贴在显示器边的纸条:拉代码、改配置、备份、reload、测 5 个页面。4 月把它搬进 Jenkins,一条流水线 7 个阶段,构建产物带 Git 短哈希命名,回滚就是选上一次的制品重新分发。第一次跑的时候备份那步忘了加 set -e,脚本失败还往下走了。

2020年4月9日持续集成上线自动化

上线原来靠一张纸条,贴在运维显示器右边框上,五步:拉代码、改配置、备份、reload、点 5 个页面看看。字是手写的,两年里改过三次,最后那次把「别忘了清缓存」挤在了角落。

4 月把它搬进 Jenkins。

流水线长什么样

一条 job,7 个阶段:拉指定分支、装依赖、跑测试、打包、传到目标机、备份当前版本、切软链并 reload。产物文件名带 Git 短哈希,比如 app-20200409-a3f7c2.tar.gz,放到 releases 目录,current 是个软链指过去。

回滚就是选上一次的制品,把软链重新指一下,不重新构建、不重新拉代码。跟之前灰度那套 Nginx 权重是两回事,这个更笨,但够用。

第一次跑出的岔子

备份那一步写的是 shell 脚本,忘了加 set -e。备份其实失败了,脚本却继续往下走,把新版本切上去了。好在是预发环境,没影响线上,但当时看着日志一路绿到底,心里发毛。

改完加了两样:每个脚本开头 set -euo pipefail;备份完立刻校验产物大小非 0,不对就整个停掉。

配置不进仓库

有段时间总有人问,数据库密码放哪。我们没放进 Git,放在目标机一个只有部署账号能读的文件里,Jenkins 里只存一个 SSH 私钥。改配置走另一条单独的审批,不跟发版混在一起。

那 5 个页面

原来人肉点的 5 个页面,写成了 5 条 curl 检查:首页 200、登录接口返回预期字段、静态资源能取到、接口不报 500、健康检查端点通。任何一条失败,流水线停在切软链之前。

不测业务正确性,只测「活着」。业务那部分还是人点,我们没敢省。

纸条

纸条没扔,压在键盘下面了。有回 Jenkins 服务自己挂了,有人照着走了一遍,五步还在,字还认得。

商务咨询 · 免费初步沟通

需要针对你的场景给个建议?

把业务背景和当前系统情况告诉我们,我们会给出可执行的思路。

在线留言

周一至周五 9:00–18:00 · 工作日 9:00–18:00 响应,留言会在一个工作日内回复。

商务微信
商务微信二维码

扫一扫,加商务微信咨询服务与方案报价

或填写需求表单