
老张在常州某软件公司干了十年运维,最怕听到的话就是""代码写完了,明天上线""。以前上线是场硬仗,手动打包、手动上传、手动部署,出点差错就得熬通宵。自从搭了CI/CD流水线,老张终于能准点下班接孩子放学了。
持续集成这块,核心是把代码集成这件事自动化。代码推送到Git仓库,Jenkins自动拉取代码、运行单元测试、做代码扫描。测试不通过的直接驳回,开发人员手机上就能看到邮件提醒。常州有个项目组更狠,在流水线里加了代码覆盖率门槛,低于百分之八十不让合并主干,逼着大家写单元测试。刚开始怨声载道,三个月后线上bug数量直接腰斩。
持续交付最难的是环境一致性。开发用Windows,测试用Linux,生产又是另一套配置,这种问题坑过无数人。Docker的出现救了老张,把应用和依赖一起打包成镜像,开发测什么镜像,测试测什么镜像,生产跑什么镜像,一模一样。配合Kubernetes的滚动更新,新版本上线时可以逐步替换旧版本,先升级一台观察五分钟没问题再继续,出问题立刻回滚,用户毫无感知。
自动化测试在流水线里得讲究策略。全量跑一遍耗时太长,老张他们设计成三级流水线。提交代码时跑快速测试,十分钟内出结果;凌晨跑全量回归测试,第二天早上看报告。性能测试放在预发环境自动触发,模拟生产流量看看系统扛不扛得住。常州某金融项目更是加了安全扫描环节,镜像里的漏洞一个不漏全扫出来。现在老张的团队每周能发布十几次,再也不用提心吊胆过日子了。