Appearance
CI/CD 持续集成核心功能实现
这是一个最小但完整的 CI/CD 持续集成实现,展示了 CI/CD 的核心概念和实现方式。
项目结构
cicd-system/
├── .github/
│ └── workflows/
│ ├── ci.yml # CI 工作流
│ └── cd.yml # CD 工作流
├── src/
│ ├── app.js # 应用代码
│ └── app.test.js # 测试代码
├── scripts/
│ ├── test.js # 测试脚本
│ └── deploy.js # 部署脚本
├── Dockerfile # Dockerfile
├── docker-compose.yml # Docker Compose
├── jest.config.js # Jest 配置
└── README.md安装依赖
bash
npm install运行测试
bash
npm test核心功能
1. CI 工作流
实现代码检查、测试和构建。
2. CD 工作流
实现自动化部署到服务器。
3. 测试脚本
实现单元测试和集成测试。
4. 部署脚本
实现 Docker 容器部署。
使用示例
本地测试
bash
# 运行代码检查
npm run lint
# 运行测试
npm test
# 生成覆盖率报告
npm run test:coverageCI/CD 流程
bash
# 提交代码
git add .
git commit -m "feat: add new feature"
git push
# GitHub Actions 自动触发 CI/CD部署到服务器
bash
# 构建镜像
docker build -t myapp:latest .
# 运行容器
docker run -d -p 3000:3000 --name myapp myapp:latest
# 健康检查
curl http://localhost:3000/health可扩展功能点
1. 多环境部署
实现多环境配置:
yaml
# TODO: 实现多环境部署
jobs:
deploy-staging:
environment: staging
steps:
- name: 部署到测试环境
run: |
docker pull myapp:latest
docker run -d --name myapp-staging -p 3001:3000 myapp:latest
deploy-production:
environment: production
needs: deploy-staging
steps:
- name: 部署到生产环境
run: |
docker pull myapp:latest
docker run -d --name myapp -p 3000:3000 myapp:latest2. 回滚机制
实现自动回滚:
javascript
// TODO: 实现回滚机制
async function rollback(previousVersion) {
console.log(`Rolling back to version: ${previousVersion}`);
// 停止当前容器
await stopContainer();
// 启动旧版本
await startContainer(previousVersion);
// 健康检查
await healthCheck();
}3. 通知机制
实现部署通知:
yaml
# TODO: 实现通知机制
- name: 通知部署成功
if: success()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: '部署成功!'
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
- name: 通知部署失败
if: failure()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: '部署失败!'
webhook_url: ${{ secrets.SLACK_WEBHOOK }}4. 性能测试
集成性能测试:
javascript
// TODO: 实现性能测试
async function runPerformanceTest() {
const { performance } = require('perf_hooks');
const start = performance.now();
// 运行测试
await runLoadTest();
const end = performance.now();
const duration = end - start;
console.log(`Performance test completed in ${duration}ms`);
if (duration > 1000) {
throw new Error('Performance test failed');
}
}5. 安全扫描
集成安全扫描:
yaml
# TODO: 集成安全扫描
- name: 运行安全扫描
uses: aquasecurity/trivy-action@master
with:
image-ref: ${{ secrets.DOCKER_USERNAME }}/myapp:latest
format: 'sarif'
output: 'trivy-results.sarif'
- name: 上传扫描结果
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'下一步
查看 05-lesson-plan.md 了解详细的课程计划。

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态
