DevOps 是以问题为导向的工程实践体系,需先明确实际需求再选工具;应逆向拆解手工流程、警惕工具幻觉、重视权限设计。

DevOps 不是一门可以“从零学起”的独立学科,而是一套围绕协作、自动化和反馈的工程实践体系。直接照着路线图学工具链,大概率会卡在“知道命令但不懂为什么执行”这一步。
先搞清你实际要解决的问题,再选工具
很多人一上来就啃 Docker 或 Kubernetes 文档,结果部署一个 Python Web 应用都反复失败。真实场景里,90% 的入门级 DevOps 任务集中在:代码改完怎么自动跑测试、怎么一键发到测试服务器、线上出问题能不能快速回滚。
- 如果你日常用 Git 管理代码,但每次上线都要手动打包 + SCP + SSH 启动,
GitHub Actions或Jenkins就是你的起点 - 如果你本地跑得好,一上服务器就缺依赖、端口冲突、环境不一致,
Docker是比Kubernetes实际得多的选择 - 如果你连 Linux 命令行都不熟(比如分不清
chmod和chown),先花两天把bash基础、systemctl、日志查看(journalctl/tail -f /var/log/xxx)练熟
别跳过“手工流程”的逆向拆解
自动化不是写脚本,而是把人干的活一步步记下来、验证、抽象。比如“发布一个 Flask 应用”,先手动走一遍:
- 拉代码:
git pull origin main - 装依赖:
pip install -r requirements.txt - 停旧进程:
systemctl stop myapp - 启新服务:
systemctl start myapp - 检查日志:
journalctl -u myapp -n 20
只有把这五步全写进一个 deploy.sh 并能重复执行成功,才值得考虑把它塞进 GitHub Actions 的 on: push 流程里。
警惕“工具幻觉”:YAML 不是 DevOps,它只是胶水
看到别人用 .github/workflows/ci.yml 或 pipeline.jenkinsfile 就以为掌握了核心,其实 YAML 只是把步骤声明出来,真正关键的是每一步背后的行为逻辑:
-
run: npm test能跑通,不代表 CI 环境里有 Node.js —— 你得确认 runner 镜像是否预装,或显式加uses: actions/setup-node@v4 -
uses: docker/build-push-action@v5默认不推镜像到仓库,漏写push: true和tags参数,构建完就丢弃了 -
env:下写的变量,在 shell 步骤里可用,但在with:里要用${{ secrets.MY_TOKEN }}语法,混用直接报错
最常被跳过的环节是权限设计:CI/CD 流水线该用什么账号操作生产服务器?是用 ssh-key 还是 token?这个账号最小该有哪些 sudo 权限?没想清楚就写自动化,等于给线上环境埋定时脚本。










