| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- name: Backend CI/CD Pipeline
- on:
- push:
- branches: [main, develop]
- paths:
- - 'backend/**'
- pull_request:
- branches: [main, develop]
- paths:
- - 'backend/**'
- jobs:
- test:
- name: 测试
- runs-on: ubuntu-latest
-
- strategy:
- matrix:
- node-version: [20.x]
-
- steps:
- - name: 检出代码
- uses: actions/checkout@v3
-
- - name: 设置Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
- with:
- node-version: ${{ matrix.node-version }}
- cache: 'npm'
- cache-dependency-path: backend/package-lock.json
-
- - name: 安装依赖
- working-directory: ./backend
- run: npm ci
-
- - name: 代码检查
- working-directory: ./backend
- run: npm run lint
-
- - name: 运行单元测试
- working-directory: ./backend
- run: npm test -- --coverage --watchAll=false
-
- - name: 上传测试覆盖率报告
- uses: codecov/codecov-action@v3
- with:
- file: ./backend/coverage/lcov.info
- flags: backend
- name: backend-coverage
- build:
- name: 构建
- needs: test
- runs-on: ubuntu-latest
-
- steps:
- - name: 检出代码
- uses: actions/checkout@v3
-
- - name: 设置Node.js
- uses: actions/setup-node@v3
- with:
- node-version: '20'
- cache: 'npm'
- cache-dependency-path: backend/package-lock.json
-
- - name: 安装依赖
- working-directory: ./backend
- run: npm ci
-
- - name: 构建应用
- working-directory: ./backend
- run: npm run build
-
- - name: 上传构建产物
- uses: actions/upload-artifact@v3
- with:
- name: dist
- path: backend/dist
- docker:
- name: Docker镜像
- needs: build
- runs-on: ubuntu-latest
- if: github.ref == 'refs/heads/main'
-
- steps:
- - name: 检出代码
- uses: actions/checkout@v3
-
- - name: 设置Docker Buildx
- uses: docker/setup-buildx-action@v2
-
- - name: 登录Docker Hub
- uses: docker/login-action@v2
- with:
- username: ${{ secrets.DOCKER_USERNAME }}
- password: ${{ secrets.DOCKER_PASSWORD }}
-
- - name: 构建并推送Docker镜像
- uses: docker/build-push-action@v4
- with:
- context: ./backend
- file: ./backend/Dockerfile
- push: true
- tags: |
- ${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:latest
- ${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:${{ github.sha }}
- cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:buildcache
- cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/ecommerce-backend:buildcache,mode=max
|