如何从零搭建一套可用的 DevOps 工具链
DevOps 工具链搭建的核心,是把代码提交、自动构建、测试、部署和监控串成一条能重复执行的流水线。
对零基础用户来说,最容易卡住的地方是工具太多、不知道先装哪个。
下面按最小可用路径来搭,先把链路跑通,再逐步加工具。
先想清楚要串起哪几段
一套基础工具链通常包括四段:代码托管、持续集成、制品与容器运行、监控告警。
你可以先用一台 2 核 4G 的 Linux 服务器起步,系统建议 Ubuntu 22.04 或 CentOS 7 以上。
搭建前确认服务器能访问外网、已开放所需端口,并准备好一个能登录的 SSH 密钥。
如果只是想先体验,可以把代码托管和 CI/CD 装在同一台机器;
生产环境建议拆分,避免构建任务把运行环境拖垮。
第一步:装好代码托管
用 GitLab 或 Gitea 都可以。
以 Docker 方式启动 Gitea 更轻量,适合入门:
docker run -d --name gitea \
-p 3000:3000 -p 222:22 \
-v /data/gitea:/data \
gitea/gitea:latest
启动后浏览器访问 http://服务器IP:3000,完成初始管理员设置。
随后创建一个测试仓库,把本地代码推上去:
git remote add origin http://服务器IP:3000/用户名/仓库名.git
git push -u origin main
能成功推送并看到提交记录,说明代码托管这一段通了。
第二步:让提交自动触发构建
持续集成工具推荐 Jenkins,生态成熟、插件多。
用 Docker 启动:
docker run -d --name jenkins \
-p 8080:8080 -p 50000:50000 \
-v /data/jenkins:/var/jenkins_home \
jenkins/jenkins:lts
访问 http://服务器IP:8080,用容器内初始密码解锁。
进入后在“系统管理-插件管理”安装 Git 和 Pipeline 相关插件。
新建一个流水线任务,在流水线脚本里填写:
pipeline {
agent any
stages {
stage('拉取代码') {
steps { git 'http://服务器IP:3000/用户名/仓库名.git' }
}
stage('构建') {
steps { sh 'echo 这里放构建命令' }
}
}
}
保存后手动触发一次,控制台输出出现“Finished: SUCCESS”即表示流水线可运行。
第三步:把部署交给容器
构建产物用 Docker 运行,环境一致性更好。
先在服务器安装 Docker,再写一个最简 Dockerfile:
FROM nginx:alpine
COPY ./dist /usr/share/nginx/html
构建并启动:
docker build -t myapp:latest .
docker run -d --name myapp -p 80:80 myapp:latest
浏览器访问服务器 IP,能看到页面即部署成功。
把这两条命令写进 Jenkins 的构建阶段,就实现了“提交代码-自动构建-自动部署”的闭环。
第四步:加上监控和告警
工具链跑起来后,需要知道服务是否正常。
可以用 Prometheus 加 Grafana,也可以先用简单方案:写一个定时脚本检查 HTTP 状态码,异常时发邮件或 webhook。
curl -o /dev/null -s -w "%{http_code}" http://127.0.0.1
返回 200 表示服务正常;
返回 502、404 等就要排查容器是否退出、端口是否被占用。
容易踩的坑
- 端口冲突:Jenkins 默认 8080,如果被占用,启动会失败,改映射端口即可。
- 权限问题:Jenkins 容器内用户可能没有 Docker 权限,需要把用户加入 docker 组或挂载 socket。
- 数据丢失:所有工具都要挂载数据卷,否则容器删除后配置全丢。
- 构建太慢:插件和依赖首次拉取会慢,属于正常现象,不要反复重启。
- 安全暴露:不要把 Jenkins、Gitea 直接暴露到公网不加认证,至少设置强密码并限制访问来源。
怎么确认搭好了
按顺序检查:代码能推送到仓库;
Jenkins 能拉取代码并构建成功;
Docker 容器处于运行状态;
通过浏览器能访问部署的服务;
监控脚本能返回状态码。
五项都通过,说明最小可用工具链已经成型。
后续再按需加入自动化测试、镜像仓库和日志收集,不必一次装齐。