项目的CI和CD怎么做?

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


一、CI/CD 的核心概念

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

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


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

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

  1. 代码提交‌:开发者将代码推送到 Git 仓库(如 GitHub、GitLab)。
  2. 触发流水线 ‌:Git 事件(如 pushmerge request)自动触发 CI/CD 流程。
  3. 构建(Build) ‌:
    • 安装依赖(如 npm installpip 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 pushmain 分支,自动执行构建与部署‌ ‌7。


五、最佳实践建议

  • 频繁提交代码‌:减少集成冲突。
  • 自动化一切‌:构建、测试、部署、回滚。
  • 环境一致性‌:使用 Docker 确保开发、测试、生产环境一致 ‌6。
  • 安全左移‌:在流水线中集成 SAST(如 SonarQube)、SCA(软件成分分析)‌6。
  • 监控与回滚‌:部署后立即验证,并支持一键回滚 ‌10。
相关推荐
cy_cy0027 小时前
创意MG动画制作,提升展厅吸引力与信息记忆度
大数据·科技·人机交互·交互·软件构建
郝学胜-神的一滴2 天前
Python 高级编程 019:类变量与实例变量彻底解析
开发语言·python·程序人生·软件构建
郝学胜-神的一滴3 天前
Qt 高级开发 027: QTabWidget自定义样式表美化实战
开发语言·c++·qt·程序人生·软件构建·用户界面
郝学胜-神的一滴3 天前
Qt 高级开发 026:QTabWidget御道,从筑基到化境
开发语言·c++·qt·程序人生·软件构建·用户界面
郝学胜-神的一滴6 天前
Qt 高级开发 025:打造优雅界面的艺术与高效重构之道
开发语言·c++·qt·程序人生·重构·软件构建·用户界面
郝学胜-神的一滴6 天前
干货版《算法导论》08:哈希——重构集合数据结构的速度魔法
数据结构·python·程序人生·算法·重构·软件构建·哈希算法
郝学胜-神的一滴7 天前
系统设计 014:缓存深度实战:如何用 Cache 优雅优化数据库读写?
java·数据库·python·缓存·oracle·php·软件构建
酿情师9 天前
逆向exe文件:CRT 初始化流程详细分析
android·软件构建·逆向·re·crt‘
郝学胜-神的一滴9 天前
Python 高级编程 018:深挖 super
开发语言·python·程序人生·软件构建
阳区欠9 天前
CMake
软件构建·cmake