Docker Node.js 应用 CI/CD 配置指南
前言
在现代软件开发中,持续集成和持续部署(CI/CD)已成为不可或缺的环节。本文将详细介绍如何为基于 Docker 的 Node.js 应用配置完整的 CI/CD 流程,帮助开发者实现自动化构建、测试和部署。
准备工作
在开始配置 CI/CD 之前,请确保已完成以下准备工作:
- 已完成 Node.js 应用的容器化(参考容器化指南)
- 拥有代码托管平台账号
- 拥有容器镜像仓库账号
- 本地开发环境已配置好 Git 和 Docker
CI/CD 流程概述
我们将配置的 CI/CD 流程包含以下关键步骤:
- 代码提交触发自动化流程
- 构建 Docker 镜像
- 运行测试
- 推送镜像到容器镜像仓库
- 部署到生产环境(可选)
详细配置步骤
第一步:创建代码仓库并配置凭证
-
创建新仓库:
- 在代码托管平台创建新仓库
- 初始化 README 和 .gitignore 文件(推荐包含 node_modules/)
-
配置容器镜像仓库凭证:
- 进入仓库设置 > 机密与变量 > 操作
- 添加仓库变量:
DOCKER_USERNAME
(值为你的容器镜像仓库 ID) - 创建容器镜像仓库个人访问令牌(PAT),权限需包含读写
- 添加仓库机密:
DOCKER_REGISTRY_TOKEN
(值为刚创建的 PAT)
-
推送本地代码:
git remote set-url origin 你的仓库地址 git add -A git commit -m "初始化提交" git push -u origin main
第二步:配置工作流文件
在仓库中创建 .github/workflows/main.yml
文件,内容如下:
name: Node.js CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v4
- name: 登录容器镜像仓库
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
- name: 设置构建环境
uses: docker/setup-buildx-action@v3
- name: 构建测试镜像并运行测试
uses: docker/build-push-action@v6
with:
target: test
load: true
tags: ${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:test
- name: 构建生产镜像并推送
uses: docker/build-push-action@v6
with:
platforms: linux/amd64,linux/arm64
push: true
target: prod
tags: |
${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:latest
${{ vars.DOCKER_USERNAME }}/${{ github.event.repository.name }}:${{ github.sha }}
关键配置说明
-
触发条件:
- 主分支的推送和拉取请求都会触发流程
- 可根据需要调整触发条件
-
多阶段构建:
- 利用 Dockerfile 中定义的
test
和prod
阶段 - 先构建测试镜像并运行测试
- 测试通过后才构建生产镜像
- 利用 Dockerfile 中定义的
-
多平台支持:
- 同时构建 amd64 和 arm64 架构的镜像
- 确保应用能在不同硬件架构上运行
-
镜像标签策略:
- 使用 latest 标签指向最新稳定版本
- 使用 Git commit SHA 作为唯一标识符
第三步:运行工作流
-
提交并推送工作流文件:
git add .github/workflows/main.yml git commit -m "添加 CI/CD 工作流" git push
-
在代码托管平台的 Actions 选项卡中:
- 查看工作流执行状态
- 可点击查看每个步骤的详细日志
-
验证结果:
- 工作流完成后,检查容器镜像仓库
- 应能看到新推送的镜像
高级配置建议
-
缓存优化:
- name: 缓存 Docker 层 uses: actions/cache@v3 with: path: /tmp/.buildx-cache key: ${{ runner.os }}-buildx-${{ github.sha }} restore-keys: | ${{ runner.os }}-buildx-
-
多环境部署:
- 可扩展工作流以支持测试/生产环境部署
- 根据分支或标签决定部署目标
-
通知集成:
- 添加 Slack 或邮件通知
- 在构建失败时发送警报
常见问题排查
-
认证失败:
- 检查容器镜像仓库令牌是否具有足够权限
- 确认机密变量名称拼写正确
-
构建超时:
- 优化 Dockerfile 减少构建时间
- 考虑使用更大的 CI 运行器
-
测试失败:
- 检查本地测试是否通过
- 确保测试环境与 CI 环境一致
总结
本文详细介绍了如何为 Docker 化的 Node.js 应用配置完整的 CI/CD 流程。通过自动化构建、测试和部署,开发者可以:
- 提高开发效率
- 确保代码质量
- 实现快速迭代
- 保证环境一致性
建议根据项目实际需求调整工作流配置,并定期审查 CI/CD 流程以确保其高效可靠。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考