分享多伦多服务器使用 GitHub Actions 搭建 CI/CD 流水线的实战经验。
CI/CD 是现代软件开发的核心实践。本文分享多伦多服务器 GitHub Actions CI/CD 实战。
CI/CD 概念 1) CI(持续集成):代码合并后自动构建和测试 2) CD(持续部署):测试通过后自动部署 3) 优势:快速反馈、减少错误、提高效率 4) 工具:GitHub Actions、GitLab CI、Jenkins
GitHub Actions 基础 1) Workflow:自动化流程定义 2) Event:触发工作流的事件(push、pull_request) 3) Job:一组步骤 4) Step:单个操作 5) Runner:执行工作流的机器
基础 Workflow ```yaml name: CI on: [push] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '18' - run: npm ci - run: npm test - run: npm run build ```
多环境部署 1) dev:开发环境,每次 push 自动部署 2) staging:预发环境,合并到 main 后部署 3) prod:生产环境,手动触发或 tag 触发 4) 环境隔离:不同环境不同配置和密钥
构建和测试 1) 单元测试:快速验证代码逻辑 2) 集成测试:验证模块间协作 3) 代码检查:Lint、类型检查 4) 安全扫描:依赖漏洞、代码安全 5) 构建产物:可复用的构建包
部署策略 1) 滚动部署:逐步替换,无停机 2) 蓝绿部署:两套环境,切换流量 3) 金丝雀发布:小流量验证,逐步放量 4) 回滚机制:失败快速回滚
密钥管理 1) GitHub Secrets:加密存储敏感信息 2) 环境变量:按环境配置 3) 不在代码中硬编码密钥 4) 定期轮换密钥
通知和审批 1) 部署通知:Slack、邮件、钉钉 2) 生产审批:手动审批后部署 3) 失败告警:及时通知负责人 4) 部署记录:完整的部署日志
多伦多服务器部署 1) SSH 部署:通过 SSH 执行部署命令 2) 容器部署:拉取镜像并重启 3) 蓝绿部署:Nginx 切换 upstream 4) 健康检查:部署后验证服务正常
完整 Workflow 示例 ```yaml name: Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest environment: production steps: - uses: actions/checkout@v4 - name: Build and push run: | docker build -t myapp:${{ github.sha }} . docker push myapp:${{ github.sha }} - name: Deploy to Toronto uses: appleboy/ssh-action@v1 with: host: ${{ secrets.TORONTO_HOST }} username: ${{ secrets.TORONTO_USER }} key: ${{ secrets.TORONTO_KEY }} script: | docker pull myapp:${{ github.sha }} docker stop myapp || true docker rm myapp || true docker run -d --name myapp myapp:${{ github.sha }} ```
最佳实践 1) 流水线要快:控制在 10 分钟内 2) 测试要可靠:避免不稳定的测试 3) 部署要安全:审批、回滚、健康检查 4) 日志要完整:便于问题排查 5) 持续优化:定期优化流水线
常见问题 问题一:流水线太慢 修复:缓存依赖、并行 job、优化测试。
问题二:部署失败 修复:完善回滚机制;健康检查失败自动回滚。
问题三:密钥泄露 修复:使用 Secrets;不在日志中打印敏感信息。
问题四:环境不一致 修复:容器化;统一构建产物。
总结:CI/CD 是提升研发效率的关键。GitHub Actions 简单易用,配合多伦多服务器,可以实现从代码提交到生产部署的全自动化。