当前位置: 首页 > news >正文

搭建CI/CD 流水线简单说明

一、CI/CD 流水线是什么?

CI(持续集成)

  • 目标:频繁(每日多次)将代码合并到主分支,通过自动化测试快速发现错误。
  • 关键动作:
    • 代码提交后自动触发构建(编译、打包)。
    • 运行单元测试、集成测试。
    • 生成可部署的产物(如 JAR 包、Docker 镜像)。

CD(持续交付/部署)

  • 持续交付:确保代码随时可手动部署到生产环境(通过自动化测试后)。
  • 持续部署:在持续交付基础上,自动部署到生产环境(无需人工干预)。

流水线(Pipeline)

  • 将 CI 和 CD 串联成自动化工作流,包含多个阶段:
  graph LRA[代码提交] --> B[代码编译/打包]B --> C[自动化测试]C --> D{测试通过?}D -- 是 --> E[构建镜像/产物]E --> F[部署到测试环境]F --> G[验收测试]G --> H{生产部署条件满足?}H -- 是 --> I[部署到生产]

二、如何搭建 CI/CD 流水线?

核心步骤
  1. 托管代码

    • 使用 Git 仓库(GitHub、GitLab、Gitee 等)。
  2. 编写流水线配置

    • 在项目中添加配置文件(如 .gitlab-ci.yml、Jenkinsfile、.github/workflows/deploy.yml)。

    • 定义阶段和执行脚本(示例):

           # GitHub Actions 示例jobs:build-and-deploy:steps:- name: 构建项目run: mvn clean package- name: 运行单元测试run: mvn test- name: 构建 Docker 镜像run: docker build -t my-app .- name: 部署到测试环境if: success()  # 仅当测试通过时执行run: kubectl apply -f k8s-deployment.yaml
      
  3. 选择 CI/CD 工具

    • 免费方案:

      • GitHub Actions(GitHub 仓库免费额度)
      • GitLab CI(社区版免费)
      • Jenkins(开源免费,需自建服务器)
    • 商业方案:

      • GitLab Premium、GitHub Enterprise、AWS CodePipeline
  4. 配置自动化触发

    • 按事件触发(如 git push、定时任务、PR 合并)。
  5. 连接部署环境

    • 配置凭据(如 K8s 密钥、云账号 Access Key),实现自动部署。

三、要钱吗?

方案费用说明
开源工具Jenkins、Drone 等免费,但需自备服务器(或虚拟机资源)。
托管服务GitHub Actions:公开仓库免费,私有仓库每月有一定免费额度,超出需付费。
GitLab SaaS:免费版可用,高级功能需付费。
云厂商集成AWS CodePipeline/Azure DevOps:按流水线执行次数和资源使用量收费。
隐性成本服务器维护、存储空间、网络流量(如频繁拉取 Docker 镜像可能产生带宽费用)。

低成本起步建议: 选择 GitHub Actions + 免费额度(2000 分钟/月),或自建 Jenkins(利用闲置服务器)。

四、难吗?

难度分级
场景难度说明
基础流水线⭐☆仅需编译代码 + 运行测试(如 Maven 项目)。
容器化部署⭐⭐☆需编写 Dockerfile + K8s 配置,熟悉镜像推送(如 Docker Hub)。
多环境部署⭐⭐⭐☆需管理测试/预发/生产环境,配置复杂权限和回滚策略。
微服务流水线⭐⭐⭐⭐需协调多个服务依赖、契约测试、分布式追踪集成。
降低难度的关键
  1. 模板复用:
    • 使用 GitHub/GitLab 提供的模板快速生成流水线配置。
  2. 渐进式实践:
    • 先实现 CI(自动测试),再扩展 CD(部署到测试环境)。
  3. 工具选择:
    • 优先选托管服务(如 GitHub Actions),避免 Jenkins 插件兼容性问题。
  4. 基础设施即代码(IaC):
    • 用 Terraform/Ansible 管理环境,确保部署一致性。

五、入门操作指南(以 GitHub Actions 为例)

  1. 在项目根目录创建 .github/workflows/main.yml

  2. 编写流水线

    name: CI/CD Pipeline
    on: [push]  # 代码推送时触发jobs:build:runs-on: ubuntu-lateststeps:- name: 拉取代码uses: actions/checkout@v4- name: 构建项目run: mvn clean package- name: 单元测试run: mvn testdeploy-to-test:needs: build  # 依赖 build 任务runs-on: ubuntu-latestif: github.ref == 'refs/heads/main'  # 仅 main 分支触发steps:- name: 部署到测试环境uses: appleboy/ssh-action@masterwith:host: ${{ secrets.TEST_SERVER_IP }}username: ubuntukey: ${{ secrets.SSH_PRIVATE_KEY }}script: |cd /opt/app && ./deploy.sh
    
  3. 配置仓库 Secrets:

    • 在 GitHub 仓库设置中填入 SSH_PRIVATE_KEYTEST_SERVER_IP

总结

  • 成本可免费起步(开源工具 + 基础资源),规模化后按需付费。

  • 难度中等(需掌握 YAML 编写、脚本编写、环境配置),但模板和托管服务大幅降低门槛。

  • 推荐路径

    GitHub/GitLab 仓库
    编写基础 CI 流水线
    添加测试阶段
    部署到测试环境
    生产环境自动化部署

文章转载自:

http://ZTo1lWHF.swbhq.cn
http://TBi75L4e.swbhq.cn
http://T2GPZEPO.swbhq.cn
http://TXIpq7HO.swbhq.cn
http://o5pJiUDO.swbhq.cn
http://lMUvRttV.swbhq.cn
http://vywEXSz9.swbhq.cn
http://oB5iJLl5.swbhq.cn
http://1bbpqaBT.swbhq.cn
http://I3lmw41k.swbhq.cn
http://UyeCcEPO.swbhq.cn
http://chhkM6R6.swbhq.cn
http://z6CB2xYD.swbhq.cn
http://wDlWm4TX.swbhq.cn
http://M78wLD5o.swbhq.cn
http://9cCdWCl5.swbhq.cn
http://pi8vFFyt.swbhq.cn
http://V6mKXNrJ.swbhq.cn
http://DtJwIba3.swbhq.cn
http://lD8YKP0c.swbhq.cn
http://m2EOUQS4.swbhq.cn
http://F95fn5Ky.swbhq.cn
http://Jzx5ZszV.swbhq.cn
http://cg77Wo2r.swbhq.cn
http://wJ4BeZdW.swbhq.cn
http://FW1fb9Af.swbhq.cn
http://Mvoj1jED.swbhq.cn
http://LOh8GWpx.swbhq.cn
http://k7WQEfPf.swbhq.cn
http://aO8IoBrz.swbhq.cn
http://www.dtcms.com/a/388357.html

相关文章:

  • 大Key与热Key详解:概念、危害与解决方案
  • Java中的自动拆装箱原理
  • Android 入门笔记(2)
  • 程序员内功之成长性思维
  • vLLM 和 SGLang 是两个近年来备受关注的开源项目
  • CMake进阶: 路径处理指令join_paths和cmake_path
  • 算法简略速记手册
  • C语言(长期更新)第17讲内存函数
  • 【CSP-S】 基础知识与编程环境
  • Python HTTPS 教程 如何发送 HTTPS 请求、解决证书错误、实现抓包与网络调试全攻略
  • 【Cesium 开发实战教程】第五篇:空间分析实战:缓冲区、可视域与工程测量
  • 告别塑料感!10分钟学会基础材质调节
  • CSS Modules 和 CSS-in-JS比较
  • threejs(三)模型对象、材质
  • (自用)vscode正则表达式(正则表达式语法大全)vocode正则化(注意正则化和正则表达式不是一个概念)
  • Node.js:重新定义全栈开发的JavaScript运行时
  • @PropertySource 注解学习笔记
  • 安徽Ecovadis认证辅导怎么做呢?
  • 【完整源码+数据集+部署教程】太阳能面板缺陷分割系统: yolov8-seg-C2f-REPVGGOREPA
  • 什么是直播美颜SDK?人脸识别与实时渲染的技术解析
  • RabbitMQ-MQTT即时通讯详解
  • AI辅助论文写作:如何成为真正的“AI Native学者”?
  • Frida 实战:Android JNI 数组 (jobjectArray) 操作全流程解析
  • 腾讯正式发布全新一代智能驾驶地图9.0
  • 鸿蒙应用开发之装饰器大总结 —— 从语法糖到全场景跨语言运行时的全景视角
  • 论文阅读:EMNLP 2024 Humans or LLMs as the Judge? A Study on Judgement Bias
  • 4-1〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸目录遍历漏洞-A
  • 买期货卖认购期权策略
  • 使用 VB.NET 进行仪器编程
  • C# DataGridView中DataGridViewCheckBoxColumn不能界面上勾选的原因