Nestjs项目实战 CI/CD流水线搭建全攻略
在搭建NestJS项目的CI/CD流水线时,如何配置Docker镜像优化构建速度?
Jenkins和GitHub Actions哪种更适合NestJS项目的自动化部署?
如何解决流水线中单元测试覆盖率不足导致部署失败的问题?
NestJS的多环境配置(dev/test/prod)如何与CI/CD流程结合?
部署到K8s集群时,怎样处理NestJS应用的健康检查与滚动更新?
有没有现成的.gitlab-ci.yml或Jenkinsfile模板可以参考?
搭建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保护敏感信息。通过这种方式,每次代码提交都会触发自动测试、构建和部署流程,显著提高开发效率。
-
环境准备:确保服务器安装了Node.js、Git、Docker等基础工具。配置好Jenkins或GitHub Actions作为CI/CD工具。
-
代码拉取与构建:
- 使用Git插件拉取代码。
- 安装项目依赖
npm install
。 - 构建项目
npm run build
。
-
单元测试与代码质量检查:
- 运行单元测试
npm test
。 - 检查代码规范如ESLint。
- 运行单元测试
-
镜像构建与推送:
- 创建Dockerfile,定义运行环境。
- 构建镜像
docker build -t your-image-name .
。 - 推送至Docker Hub或私有镜像仓库。
-
部署策略:
- 使用Kubernetes或Docker Compose部署。
- 配置负载均衡和自动扩容。
-
监控与回滚:
- 集成Prometheus+Grafana监控应用状态。
- 设置版本标签,支持快速回滚。
-
自动化触发:
- 通过Git提交自动触发CI流程。
- 测试成功后自动执行CD步骤。
-
安全措施:
- 镜像扫描防止漏洞。
- 环境变量加密存储。
此流水线可显著提升开发效率与部署稳定性,适合中小型团队快速落地。
NestJS项目CI/CD流水线搭建指南
基础准备
- 确保项目已在Git仓库(GitHub/GitLab等)
- 准备好测试环境、预发布环境和生产环境
- 准备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"]
关键步骤说明
- 测试阶段:运行单元测试和集成测试
- 构建阶段:编译TypeScript代码
- 镜像构建:创建Docker镜像
- 部署阶段:将镜像推送到注册表并部署到目标环境
进阶建议
- 添加数据库迁移步骤
- 集成SonarQube等代码质量工具
- 实现蓝绿部署或金丝雀发布
- 添加通知机制(如Slack通知)
需要根据您的具体环境和需求调整上述配置。