Nestjs项目实战 CI/CD流水线搭建全攻略

在搭建NestJS项目的CI/CD流水线时,如何配置Docker镜像优化构建速度?

Jenkins和GitHub Actions哪种更适合NestJS项目的自动化部署?

如何解决流水线中单元测试覆盖率不足导致部署失败的问题?

NestJS的多环境配置(dev/test/prod)如何与CI/CD流程结合?

部署到K8s集群时,怎样处理NestJS应用的健康检查与滚动更新?

有没有现成的.gitlab-ci.yml或Jenkinsfile模板可以参考?

3 回复

搭建NestJS项目的CI/CD流水线可以提升开发效率和部署稳定性。首先,在GitLab/GitHub上配置CI/CD文件(.gitlab-ci.yml.github/workflows/main.yml)。使用Node.js镜像作为基础环境,安装依赖并运行测试。例如:

image: node:16

stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - npm install
    - npm run test

build:
  stage: build
  script:
    - npm run build

deploy:
  stage: deploy
  script:
    - scp -r dist user@your-server:/path/to/app
    - ssh user@your-server "pm2 restart app.js"

使用Docker可进一步优化,将应用打包成容器镜像推送到Harbor等私有仓库。Nginx反向代理+PM2管理进程能确保服务高可用。记得配置环境变量并通过Secrets保护敏感信息。通过这种方式,每次代码提交都会触发自动测试、构建和部署流程,显著提高开发效率。


  1. 环境准备:确保服务器安装了Node.js、Git、Docker等基础工具。配置好Jenkins或GitHub Actions作为CI/CD工具。

  2. 代码拉取与构建

    • 使用Git插件拉取代码。
    • 安装项目依赖npm install
    • 构建项目npm run build
  3. 单元测试与代码质量检查

    • 运行单元测试npm test
    • 检查代码规范如ESLint。
  4. 镜像构建与推送

    • 创建Dockerfile,定义运行环境。
    • 构建镜像docker build -t your-image-name .
    • 推送至Docker Hub或私有镜像仓库。
  5. 部署策略

    • 使用Kubernetes或Docker Compose部署。
    • 配置负载均衡和自动扩容。
  6. 监控与回滚

    • 集成Prometheus+Grafana监控应用状态。
    • 设置版本标签,支持快速回滚。
  7. 自动化触发

    • 通过Git提交自动触发CI流程。
    • 测试成功后自动执行CD步骤。
  8. 安全措施

    • 镜像扫描防止漏洞。
    • 环境变量加密存储。

此流水线可显著提升开发效率与部署稳定性,适合中小型团队快速落地。

NestJS项目CI/CD流水线搭建指南

基础准备

  1. 确保项目已在Git仓库(GitHub/GitLab等)
  2. 准备好测试环境、预发布环境和生产环境
  3. 准备Docker镜像仓库(如Docker Hub)

常用CI/CD工具选择

  • GitHub Actions
  • GitLab CI/CD
  • Jenkins
  • CircleCI

GitHub Actions示例配置(在项目根目录创建.github/workflows)

# .github/workflows/main.yml
name: NestJS CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '16'
    
    - name: Install dependencies
      run: npm ci
      
    - name: Run tests
      run: npm test
      
    - name: Build
      run: npm run build
      
    - name: Build Docker image
      run: docker build -t my-nest-app .
      
    - name: Login to Docker Hub
      if: github.ref == 'refs/heads/main'
      run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
      
    - name: Push to Docker Hub
      if: github.ref == 'refs/heads/main'
      run: |
        docker tag my-nest-app ${{ secrets.DOCKER_USERNAME }}/my-nest-app:latest
        docker push ${{ secrets.DOCKER_USERNAME }}/my-nest-app:latest

Dockerfile示例

FROM node:16-alpine

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm ci

COPY . .
RUN npm run build

EXPOSE 3000
CMD ["node", "dist/main"]

关键步骤说明

  1. 测试阶段:运行单元测试和集成测试
  2. 构建阶段:编译TypeScript代码
  3. 镜像构建:创建Docker镜像
  4. 部署阶段:将镜像推送到注册表并部署到目标环境

进阶建议

  • 添加数据库迁移步骤
  • 集成SonarQube等代码质量工具
  • 实现蓝绿部署或金丝雀发布
  • 添加通知机制(如Slack通知)

需要根据您的具体环境和需求调整上述配置。

回到顶部