
概述 #
CI/CD(持续集成/持续部署)是现代软件开发的标准实践。本文以 GitHub Actions 为例讲解自动化部署。
核心概念 #
CI (持续集成) #
每次代码提交后自动构建和测试,确保代码质量。
CD (持续部署) #
代码通过测试后自动部署到生产环境。
工作流 (Workflow) #
使用 YAML 文件定义自动化流程。
GitHub Actions 基础 #
语法结构 #
name: 工作流名称
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 运行构建
run: npm run build
- name: 部署
run: echo "Deploying..."常用事件 #
| 事件 | 触发条件 |
|---|---|
push |
代码推送到仓库 |
pull_request |
创建或更新 PR |
workflow_dispatch |
手动触发 |
schedule |
定时任务 |
实战示例 #
静态网站部署 #
name: Deploy Static Site
on:
push:
branches:
- main
jobs:
build-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Dependencies
run: npm ci
- name: Build
run: npm run build
- name: Deploy to Server
run: |
rsync -avz ./dist/ user@server:/var/www/site/Docker 镜像构建 #
name: Build and Push Docker Image
on:
push:
branches:
- main
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build Docker Image
run: docker build -t myapp:${{ github.sha }} .
- name: Push to Registry
run: |
docker tag myapp:${{ github.sha }} myregistry/myapp:${{ github.sha }}
docker push myregistry/myapp:${{ github.sha }}Node.js 应用部署 #
name: Deploy Node.js App
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Dependencies
run: npm ci
- name: Run Tests
run: npm test
- name: Build
run: npm run build
- name: Deploy
uses: appleboy/scp-action@v1.0.0
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH_KEY }}
source: "dist/*"
target: "/var/www/app"变量与密钥 #
环境变量 #
env:
NODE_ENV: production
API_URL: ${{ secrets.API_URL }}密钥管理 #
在仓库 Settings → Secrets and variables → Actions 中添加:
- SSH_KEY - SSH 私钥
- DEPLOY_PASSWORD - 部署密码
- API_TOKEN - API 访问令牌
最佳实践 #
- 分离 build 和 deploy - 便于调试
- 使用缓存 - 加速构建
- 健康检查 - 确保部署成功
- 回滚机制 - 快速恢复
- 通知 - 部署成功/失败通知
总结 #
CI/CD 是提高开发效率和软件质量的重要工具。GitHub Actions 提供了强大的自动化能力。