项目的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。
相关推荐
楼田莉子3 天前
CMake学习:CMake语法
c++·后端·学习·软件构建
楼田莉子4 天前
CMake学习:动态库场景下的应用
c++·后端·学习·软件构建
workflower4 天前
机器人应用-高空立面清洁
人工智能·深度学习·设计模式·机器人·软件工程·软件构建
cy_cy0025 天前
科技展厅借数字化实现跨越式发展
大数据·科技·人机交互·交互·软件构建
郝学胜-神的一滴6 天前
系统设计:新鲜事系统扩展与优化
java·python·职场和发展·php·软件工程·软件构建
workflower6 天前
机器人应用-室外区域巡逻
人工智能·设计模式·机器人·软件工程·软件构建
电子科技圈6 天前
IAR作为Qt Group独立BU携两项重磅汽车电子应用开发方案首秀北京车展
开发语言·人工智能·汽车·软件工程·软件构建·代码规范·设计规范
cy_cy0027 天前
从旁观到参与,体感游戏赋能教育展厅
大数据·科技·人机交互·交互·软件构建
小神.Chen8 天前
Rainmeter 中如何修改自己喜欢的字体
学习·软件构建
geovindu9 天前
go: Bridge Pattern
开发语言·设计模式·golang·软件构建·桥接模式