持续部署
已发行
本章内容概览:
- GitHub Actions 简介
- 构建 Docker 镜像
- 运行自动化测试
- 部署到 Kubernetes
- 完整的 CD 流水线
8.1 什么是持续部署?
定义 持续部署通过自动化方式将代码变更部署到生产环境。
CI/CD 区别:
- CI(持续集成):频繁集成代码,运行自动化测试
- CD(持续部署):自动部署到生产环境
- 持续交付:代码随时可部署,但可能手动触发
优势:
- 快速反馈
- 降低风险(小批量变更)
- 提高效率
- 频繁发布
- 标准化流程减少错误
8.2 GitHub Actions
GitHub 提供的 CI/CD 平台。
核心概念:
- Workflow:自动化流程定义
- Event:触发工作流的事件(push、pull_request)
- Job:工作流中的作业
- Step:作业中的单个操作
- Action:可重用的步骤
- Runner:执行工作流的服务器
Workflow 文件: .github/workflows/deploy.yml
8.3 构建和部署流程
8.3.1 登录容器仓库
- name: Login to ACR
uses: azure/docker-login@v1
with:
login-server: ${{ secrets.ACR_LOGIN_SERVER }}
username: ${{ secrets.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}
8.3.2 构建和推送镜像
- name: Build and push
run: |
docker build -t registry/video-streaming:${{ github.sha }} .
docker push registry/video-streaming:${{ github.sha }}
8.3.3 运行测试
- name: Run tests
run: |
npm install
npm test
8.3.4 部署到 Kubernetes
- name: Set kubectl context
uses: azure/aks-set-context@v3
with:
resource-group: ${{ secrets.RESOURCE_GROUP }}
cluster-name: ${{ secrets.CLUSTER_NAME }}
- name: Deploy to Kubernetes
run: |
kubectl set image deployment/video-streaming \
video-streaming=registry/video-streaming:${{ github.sha }}

8.4 完整 Workflow 示例
name: Build and Deploy
on:
push:
branches: [ main ]
jobs:
build-test-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install and test
run: |
npm ci
npm test
- name: Login to ACR
uses: azure/docker-login@v1
with:
login-server: ${{ secrets.ACR_LOGIN_SERVER }}
username: ${{ secrets.ACR_USERNAME }}
password: ${{ secrets.ACR_PASSWORD }}
- name: Build and push
run: |
docker build -t ${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }} .
docker push ${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }}
- name: Deploy to Kubernetes
uses: azure/k8s-deploy@v4
with:
manifests: |
k8s/deployment.yaml
images: |
${{ secrets.ACR_LOGIN_SERVER }}/app:${{ github.sha }}
8.5 最佳实践
- 使用 Secrets:存储敏感信息
- 并行化:并行运行独立任务
- 缓存:缓存依赖加快构建
- 通知:部署失败时发送通知
- 回滚:自动回滚失败的部署
总结
- 持续部署自动化代码部署到生产环境
- GitHub Actions 提供完整的 CI/CD 平台
- Workflow 定义自动化流程
- 流程:构建 → 测试 → 推送镜像 → 部署
- Secrets 管理敏感信息
- 标准化流程提高可靠性和效率
下一章学习自动化测试。