快速结论
- 小团队起步:GitHub Actions免费额度(2000分钟/月)完全够用
- 国内团队:阿里云云效或腾讯云CODING,与云服务整合更顺畅
- 核心流程:代码提交 -> 自动测试 -> 构建镜像 -> 自动部署
- 收益立竿见影:发布频率从每周一次提升到每天多次,Bug修复时间从小时级降到分钟级
CI/CD是什么?为什么值得投入?
CI(持续集成 Continuous Integration):每次代码提交都自动运行测试,确保代码可以正确编译和测试通过。
CD(持续部署 Continuous Deployment / 持续交付 Continuous Delivery):测试通过后,自动将代码部署到生产环境。
没有CI/CD的痛点:
- 手动部署:SSH连服务器 -> 拉代码 -> 重启服务,容易出错
- 代码合并恐惧:长期不集成导致合并地狱
- 发布频率低:每次发布都是"大事件",压力巨大
- Bug追踪难:不知道哪次提交引入了Bug
有CI/CD后:
- 代码提交后10分钟内自动部署到测试环境
- 自动化测试发现Bug,在代码审查阶段修复
- 生产发布像呼吸一样自然,风险降低
主流CI/CD平台对比
GitHub Actions(推荐)
优势:
- 代码在GitHub就直接用,零配置成本
- 免费额度:Public仓库无限,Private仓库2000分钟/月
- 生态最丰富,数千个预制Action可复用
- 支持自托管Runner(在自己服务器上运行)
适合: 使用GitHub的所有团队
阿里云云效(Alibaba Cloud DevOps)
优势:
- 与阿里云ECS、K8s、容器镜像服务深度整合
- 国内访问速度快(不用翻墙)
- 支持企业级权限管理
- 代码、需求、测试、部署一体化
适合: 技术栈在阿里云的国内团队
腾讯云CODING DevOps
优势:
- 与腾讯云TKE(容器服务)、CVM集成好
- 内置代码托管(支持Git)
- 项目管理功能完善
- 国内首家DevOps一体化平台
适合: 技术栈在腾讯云的团队,或需要代码+项目管理一体化的小团队
GitLab CI/CD(自托管)
优势:
- 完全自托管,数据不出内网
- 功能最完整(代码+CI+镜像仓库+监控)
- 开源版本免费
适合: 对数据安全有严格要求的企业
手把手:用GitHub Actions搭建CI/CD管道
项目结构
my-app/
├── .github/
│ └── workflows/
│ ├── ci.yml # 持续集成(测试)
│ └── deploy.yml # 持续部署
├── src/
├── tests/
├── Dockerfile
└── package.json第一步:CI配置(自动测试)
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 设置Node.js环境
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: 安装依赖
run: npm ci
- name: 运行单元测试
run: npm test
- name: 运行代码规范检查
run: npm run lint
- name: 构建测试
run: npm run build第二步:构建Docker镜像
# .github/workflows/deploy.yml
name: Build and Deploy
on:
push:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 登录阿里云容器镜像服务
uses: docker/login-action@v3
with:
registry: registry.cn-hangzhou.aliyuncs.com
username: ${{ secrets.ALIYUN_USERNAME }}
password: ${{ secrets.ALIYUN_PASSWORD }}
- name: 构建并推送Docker镜像
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: |
registry.cn-hangzhou.aliyuncs.com/myorg/myapp:latest
registry.cn-hangzhou.aliyuncs.com/myorg/myapp:${{ github.sha }}第三步:自动部署到云服务器
deploy:
needs: build-and-push
runs-on: ubuntu-latest
steps:
- name: SSH连接服务器并部署
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
# 拉取最新镜像
docker pull registry.cn-hangzhou.aliyuncs.com/myorg/myapp:latest
# 停止旧容器
docker stop myapp || true
docker rm myapp || true
# 启动新容器
docker run -d \
--name myapp \
--restart unless-stopped \
-p 3000:3000 \
-e NODE_ENV=production \
registry.cn-hangzhou.aliyuncs.com/myorg/myapp:latest
echo "部署完成!"第四步:配置Secrets
在GitHub仓库设置中添加:
ALIYUN_USERNAME:阿里云账号ALIYUN_PASSWORD:阿里云密码SERVER_HOST:服务器IPSERVER_USER:SSH用户名(通常是root或ubuntu)SSH_PRIVATE_KEY:SSH私钥
生产环境最佳实践
蓝绿部署(Blue-Green Deployment)
同时运行两套环境(蓝/绿),新版本先部署到绿色环境,验证无误后切换流量:
# Nginx配置切换
upstream backend {
server 127.0.0.1:3001; # 当前蓝色环境
# server 127.0.0.1:3002; # 绿色环境(切换时取消注释)
}优势: 秒级切换,回滚极简(切回蓝色环境)
金丝雀发布(Canary Release)
先将5%流量导向新版本,观察指标正常后逐步扩大:
# 阿里云K8s金丝雀发布配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "5" # 5%流量自动回滚
当错误率超过阈值时自动回滚:
# 监控错误率,超过5%自动回滚
if [ $ERROR_RATE -gt 5 ]; then
echo "错误率超标,自动回滚..."
kubectl rollout undo deployment/myapp
fiDevOps文化建设
技术只是DevOps的一半,更重要的是文化:
- 开发和运维共担责任:开发者负责服务的整个生命周期
- 快速失败,快速恢复:鼓励小步快跑,缩短反馈循环
- 度量一切:DORA四指标(部署频率、变更前置时间、变更失败率、恢复时间)
- 无责任事故复盘:从故障中学习,而非追究责任
推荐方案
起步阶段:GitHub Actions + 阿里云ECS,免费+低成本开始
成长阶段:腾讯云CODING或阿里云云效,团队协作+部署一体化
规模化阶段:Kubernetes + 阿里云/腾讯云容器服务,分钟级弹性扩容
CI/CD的投资回报率极高:一次配置,永久受益。现在就开始,未来的你会感谢今天的决定。