ci.yml 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. name: Backend CI/CD Pipeline
  2. on:
  3. push:
  4. branches: [main, develop]
  5. paths:
  6. - 'backend/**'
  7. pull_request:
  8. branches: [main, develop]
  9. paths:
  10. - 'backend/**'
  11. jobs:
  12. test:
  13. name: 测试
  14. runs-on: ubuntu-latest
  15. strategy:
  16. matrix:
  17. node-version: [20.x]
  18. steps:
  19. - name: 检出代码
  20. uses: actions/checkout@v3
  21. - name: 设置Node.js ${{ matrix.node-version }}
  22. uses: actions/setup-node@v3
  23. with:
  24. node-version: ${{ matrix.node-version }}
  25. cache: 'npm'
  26. cache-dependency-path: backend/package-lock.json
  27. - name: 安装依赖
  28. working-directory: ./backend
  29. run: npm ci
  30. - name: 代码检查
  31. working-directory: ./backend
  32. run: npm run lint
  33. - name: 运行单元测试
  34. working-directory: ./backend
  35. run: npm test -- --coverage --watchAll=false
  36. - name: 上传测试覆盖率报告
  37. uses: codecov/codecov-action@v3
  38. with:
  39. file: ./backend/coverage/lcov.info
  40. flags: backend
  41. name: backend-coverage
  42. build:
  43. name: 构建
  44. needs: test
  45. runs-on: ubuntu-latest
  46. steps:
  47. - name: 检出代码
  48. uses: actions/checkout@v3
  49. - name: 设置Node.js
  50. uses: actions/setup-node@v3
  51. with:
  52. node-version: '20'
  53. cache: 'npm'
  54. cache-dependency-path: backend/package-lock.json
  55. - name: 安装依赖
  56. working-directory: ./backend
  57. run: npm ci
  58. - name: 构建应用
  59. working-directory: ./backend
  60. run: npm run build
  61. - name: 上传构建产物
  62. uses: actions/upload-artifact@v3
  63. with:
  64. name: dist
  65. path: backend/dist
  66. docker:
  67. name: Docker镜像
  68. needs: build
  69. runs-on: ubuntu-latest
  70. if: github.ref == 'refs/heads/main'
  71. steps:
  72. - name: 检出代码
  73. uses: actions/checkout@v3
  74. - name: 设置Docker Buildx
  75. uses: docker/setup-buildx-action@v2
  76. - name: 登录Docker Hub
  77. uses: docker/login-action@v2
  78. with:
  79. username: ${{ secrets.DOCKER_USERNAME }}
  80. password: ${{ secrets.DOCKER_PASSWORD }}
  81. - name: 构建并推送Docker镜像
  82. uses: docker/build-push-action@v4
  83. with:
  84. context: ./backend
  85. file: ./backend/Dockerfile
  86. push: true
  87. tags: |
  88. ${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:latest
  89. ${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:${{ github.sha }}
  90. cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:buildcache
  91. cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:buildcache,mode=max