前言

大家好,我是老马。

“大不了就进厂打螺丝”,这大概是很多人的自嘲,或者是无奈的退路。

我们通常用“打螺丝”来指代一些简单、重复、机械繁琐的工作。

众所周知,一件事物的复杂度是固定的,任何一个零件的加工都需要很多步骤。

那么,如何让其变得简单固定呢?

工厂中的流水线

流水线是工业时代非常伟大的发明。

本质上是对一个复杂的流程进行拆解,改为标准化-简单化-可度量-可规模化的一个流水线步骤。

好处是工人的门槛降低了很多,每个人只需要专注处理其中的一个小步骤,越简单,越容易上手;越简单,也不容易出错。

当然,每一道工序是否合格,都可以在后续加一道 QA 检测,验证是否合格。

这种模式非常适合规模化的生产,可以随着投入人数的增加,效率大幅度提升,及时响应市场的需求。

缺点

甘蔗不能两头甜,流水线模式的缺点也是有的。

流水线的基础设施要求比较高,前期需要经过长期的规划+建设,投资成本比较高。

且一旦建成,工业上想随意修改的成本也会相对较高。

对工人而言,因为工作相对简单,很容易厌倦和缺乏工作激情。

软件中的流水线

工业的发展要比软件早得多,所以有很多值得学习的地方。

1970 年,瀑布式开发模型由温斯顿·罗伊斯提出,将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,规定了它们自上而下、相互衔接的固定次序。

1994 年,Grady Booch 提出持续集成。

看的出来,其实也没有多少年。大部分公司,还是停留在瀑布开发模式中。

为什么能提效?

个人理解,最主要的是 CI/CD 让我们在协作时,可以让代码保持是最新的。

每一个节点,可以添加严格的 QA 检测,比如代码是否合并了最新的分支,sonar 扫描质量是否过关,单元测试覆盖率是否满足,回归用力地通过率是否满足要求,接口文档自动更新等等。

这样可以部分功能的提测,让测试先介入进来。

测试不通过,可以打回让开发改进优化。

因为是持续部署,所以运维这一步已经提前介入了,而不用等到最后交付的时候。

编码、构建、测试、部署、监控和反馈,有些步骤的自动化减少了人工的干预,更加实时,而且错误率也更低。

如何搭建流水线呢?

说的挺好的,令人有些心动!

那么,哪里可以买到呢?(划掉)怎么自己搭建呢?

技术选型

流水线涉及到的点还是比较多的,真正转型是一个比较漫长的过程,可以逐步改进。

下面罗列一些老马比较看好的技术选型:

1. 版本控制系统 (VCS)

  • Git:Git 是最常用的版本控制工具,几乎所有流水线都会与 Git 集成。推荐使用 GitHub、GitLab、Bitbucket 等托管平台,或者自己搭建 Git 服务器。
Gitlab 有可以本地部署的版本,大多数中小型公司的不二选择。

2. 持续集成工具 (CI)

  • Jenkins:Jenkins 是一个非常流行的开源 CI/CD 工具,具有丰富的插件支持,能够与 Git 集成,实现自动化构建、测试等功能。

  • GitLab CI/CD:如果你使用 GitLab,它自带 CI/CD 功能,配置较为简便,适合中小型项目。

Jenkins 到目前为止还是技术的主流。

3. 构建工具

  • Maven / Gradle(Java):如果是 Java 项目,Maven 和 Gradle 是常见的构建工具,能够处理依赖管理和项目构建。

  • npm / yarn(Node.js):对于 Node.js 项目,npm 和 yarn 是常见的包管理工具,支持构建、测试等。

  • Makefile:对于 C/C++ 项目,Makefile 是经典的构建工具。

老马是 java 开发,平时 maven 用的最多;前端小伙伴对于 npm 应该不会陌生。

4. 代码质量和测试工具

  • SonarQube:一个开源的代码质量检查工具,支持多种语言,能够检测代码的潜在问题、漏洞、重复代码等。

  • JUnit / TestNG / Mocha / Jest:根据不同的开发语言,选择合适的单元测试框架。

  • Selenium:用于 Web 应用的自动化测试,可以集成到 CI 流水线中。

  • Linting 和格式化工具(如 ESLint、Prettier):确保代码风格统一,减少人工检查的负担。

单元测试还是推荐大家写一写,当然相对较长的业务链,还是需要归回用例才更有价值。

SonarQube 是一个非常好用的 QA 工具,直接部署即可。

5. 容器化和虚拟化

  • Docker:容器化是现代软件开发的趋势,Docker 能够保证环境一致性,并简化部署。将应用和其依赖打包成镜像,使得在开发、测试、生产环境中都能得到一致的体验。

  • Kubernetes(可选):如果你的项目需要部署到集群或云环境,可以考虑使用 Kubernetes 管理容器。虽然 Kubernetes 本身较为复杂,但它能够解决微服务架构中容器编排和服务发现等问题。

容器化这一块老马一直在使用,但是实际参与建设的并不多。

不过现在很多公司的 docker 容器化还是挺成熟的,用起来也确实方便快捷。

6. 部署工具

  • Ansible:一个简单的自动化部署工具,适合管理服务器的配置和部署任务。

  • Terraform:用于管理基础设施的开源工具,适合部署到云平台。

  • Helm:如果使用 Kubernetes,可以使用 Helm 来简化 Kubernetes 应用的部署和管理。

部署工具一般推荐自建,或者二开。

核心能力就是 ssh 到指定机器,然后调度执行对应的脚本。

自建的好处是,后续可以更加灵活的定义巡检作业+监控报警自愈的流程打通。

7. 监控与日志管理

  • Prometheus + Grafana:监控工具,Prometheus 收集监控数据,Grafana 用于展示数据,适合在生产环境中使用。

  • ELK Stack(Elasticsearch, Logstash, Kibana):用于日志收集、存储和可视化,帮助开发和运维人员快速定位问题。

  • CAT:CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。

  • SQL:SQL 这一块主要是一些业务的处理,目前市面上看起来没有特别好的,主要是自研。主要就是 SQL 的分布式定时调度。

监控报警是很重要的一个环节,也是老马最近一直在重点学习的内容。

小结

后续老马准备专门用一系列专题,实践搭建一下流水线+DevOps 平台。

对于中小公司,采用这些工具既能够保证高效的开发流程,又能够通过自动化提高代码质量和交付速度。

当然,流水线的实际搭建+推广+使用确实会有很多阻力,但是收益也是巨大的。

分工提升效率,协作促进繁荣。

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次相遇。

随笔

从千万粉丝“何同学”抄袭开源项目说起,为何纯技术死路一条?

数据源的统一与拆分

监控报警系统的指标、规则与执行闭环

我们的系统应该配置哪些监控报警项?

监控报警系统如何实现自监控?

java 老矣,尚能饭否?

一骑红尘妃子笑,无人知是荔枝来!

张居正的考成法,对我们有何参考价值?

mongodb/redis/neo4j 如何自己打造一个 web 数据库可视化客户端?

DevOps 平台越发展,开发运维越快失业?

开源如何健康长久的发展

为什么会有流水线?

既然选择了远方 便只顾风雨兼程

银行是如何挣钱的?

参考资料