项目的CI和CD怎么做?

项目的 ‌CI(持续集成) ‌ 和 ‌**CD(持续交付/部署)**‌ 是现代软件开发中实现高效、自动化交付的核心实践。以下是基于当前主流工具和最佳实践的完整指南。


‌一、CI/CD 的核心概念‌

  • ‌**CI(持续集成)**‌:开发人员频繁将代码提交到共享主干(如每天多次),每次提交后自动触发构建、测试和代码检查,确保新代码不会破坏现有功能。
  • ‌CD(持续交付 / 持续部署) ‌:
    • ‌持续交付 ‌:代码通过所有测试后,自动准备好部署到生产环境,但需‌手动触发‌发布。
    • ‌持续部署 ‌:代码通过所有测试后,‌自动发布‌到生产环境,无需人工干预。

简言之:‌**CI 负责"构建+测试",CD 负责"部署"**‌ ‌36。


‌二、典型 CI/CD 流水线阶段‌

一个标准的 CI/CD 流水线通常包含以下阶段:

  1. ‌代码提交‌:开发者将代码推送到 Git 仓库(如 GitHub、GitLab)。
  2. ‌触发流水线 ‌:Git 事件(如 push、merge request)自动触发 CI/CD 流程。
  3. ‌构建(Build) ‌:
    • 安装依赖(如 npm install、pip install)。
    • 编译源码(如前端 npm run build、Java mvn package)。
    • 生成可部署的制品(如 JAR、Docker 镜像、dist 文件夹)。
  4. ‌测试(Test) ‌:
    • 单元测试、集成测试、端到端测试。
    • 静态代码分析(如 ESLint、SonarQube)。
  5. ‌部署(Deploy) ‌:
    • 部署到测试/预发环境。
    • 可选:手动审批后部署到生产环境(持续交付)。
    • 或自动部署到生产(持续部署)。
  6. ‌验证与监控‌:部署后运行健康检查、性能监控,并支持快速回滚 ‌68。

‌三、主流 CI/CD 工具推荐‌

工具 适用场景 特点
‌GitHub Actions‌ GitHub 项目,前端/全栈开发 配置简单,内置丰富动作,适合快速上手 ‌7
‌GitLab CI/CD‌ GitLab 项目,企业级应用 内置在 GitLab 中,功能完整,支持复杂流水线 ‌48
‌Jenkins‌ 自建服务器,复杂定制需求 插件生态强大,但配置较重 ‌38
‌Travis CI / CircleCI‌ 开源或小型项目 托管服务,易用但免费版有限制 ‌3
‌腾讯云 WeData / DevOps‌ 云原生项目,尤其大数据/AI 提供 WeData Bundle 实现 CI/CD,需申请开通 ‌1

‌**四、以 GitHub Actions 为例:快速搭建 CI/CD(前端项目)**‌

假设项目为 React/Vue,部署到服务器:

  1. ‌**在项目根目录创建 .github/workflows/ci-cd.yml**‌:

    name: CI/CD Pipeline
    on:
    push:
    branches: [ main ]

    jobs:
    build-and-deploy:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
    uses: actions/checkout@v3

    复制代码
       - name: Setup Node.js
         uses: actions/setup-node@v3
         with:
           node-version: 18
    
       - name: Install dependencies
         run: npm ci
    
       - name: Run tests
         run: npm test
    
       - name: Build project
         run: npm run build
    
       - name: Deploy to server
         uses: appleboy/scp-action@master
         with:
           host: ${{ secrets.SERVER_HOST }}
           username: root
           password: ${{ secrets.SERVER_PASS }}
           source: "dist/*"
           target: "/var/www/html"
  2. ‌在 GitHub 项目 Settings → Secrets 中配置服务器信息‌:

    • SERVER_HOST
    • SERVER_PASS
  3. ‌每次 git push 到 main 分支,自动执行构建与部署‌ ‌7。


‌五、最佳实践建议‌

  • ‌频繁提交代码‌:减少集成冲突。
  • ‌自动化一切‌:构建、测试、部署、回滚。
  • ‌环境一致性‌:使用 Docker 确保开发、测试、生产环境一致 ‌6。
  • ‌安全左移‌:在流水线中集成 SAST(如 SonarQube)、SCA(软件成分分析)‌6。
  • ‌监控与回滚‌:部署后立即验证,并支持一键回滚 ‌10。
相关推荐
ZhangJun9510 天前
在 32GB 内存电脑上本地搭建 Qwen3.6-35B-A3B 大模型踩坑实录
运维·人工智能·阿里云·ai·软件构建
郝学胜-神的一滴10 天前
C++ Templates 01:拨开迷雾,读懂C++模板经典著作
开发语言·c++·程序人生·游戏·游戏引擎·软件构建
电子科技圈11 天前
基于车载SerDes和OpenGMSL协议的SoC设计与验证:行业高频问题解析
设计模式·车载系统·软件构建·设计规范
绀目澄清24 天前
3D人体解剖 示意软件 humanAtlas
软件构建
李航19831 个月前
用 DeepDraw 几何引擎开发建筑设计软件(六):创建画线工具
python·软件构建
架构谨制@涛哥1 个月前
知识工程-4.超越RAG:OKF会如何取代矢量数据库吗?
人工智能·软件工程·软件构建·知识图谱
Daorigin_com1 个月前
从“出海合规”到“全域合规”:道本科技用数字底座重构企业合规的逻辑
软件工程·团队开发·软件构建·需求分析·个人开发·设计规范·结对编程
点亮~黑夜1 个月前
远程连接浏览无桌面服务器上的图片
windows·软件构建
雾里看山1 个月前
源码目录、构建目录与 out-of-source build
c++·软件构建·cmake
冠品科技-小程序开发1 个月前
做实体的,盲盒玩法别只停留在线下
小程序·软件构建·个人开发·软件需求