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

云原生与容器--CI/CD 流水线设计实践

系列导读:本篇将深入讲解 CI/CD 流水线的设计与最佳实践。


文章目录

    • 一、CI/CD 概述
      • 1.1 什么是 CI/CD?
      • 1.2 CI/CD 工具对比
    • 二、GitOps 实践
      • 2.1 GitOps 原则
      • 2.2 GitOps 工作流
    • 三、Jenkins 流水线
      • 3.1 Jenkinsfile
    • 四、GitLab CI/CD
      • 4.1 .gitlab-ci.yml
    • 五、最佳实践
      • 5.1 分支策略
      • 5.2 流水线原则
      • 5.3 质量门禁
    • 总结

一、CI/CD 概述

1.1 什么是 CI/CD?

┌─────────────────────────────────────────────────────────────┐ │ CI/CD 流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 代码提交 ──► CI ──► CD ──► 生产环境 │ │ │ │ │ │ ▼ ▼ │ │ 构建 部署 │ │ 测试 发布 │ │ 扫描 监控 │ │ │ └─────────────────────────────────────────────────────────────┘

1.2 CI/CD 工具对比

工具类型特点
Jenkins自托管插件丰富、灵活
GitLab CI内置与 GitLab 集成
GitHub Actions云服务与 GitHub 集成
ArgoCDGitOpsK8s 原生
Tekton云原生K8s 原生

二、GitOps 实践

2.1 GitOps 原则

1. 声明式:所有配置都是声明式的 2. 版本化:Git 作为单一事实来源 3. 自动化:自动应用变更 4. 持续协调:持续监控状态差异

2.2 GitOps 工作流

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 应用仓库 │ ──► │ 配置仓库 │ ──► │ ArgoCD │ │ (代码) │ │ (清单) │ │ (同步) │ └─────────────┘ └─────────────┘ └─────────────┘ │ ▼ ┌─────────────┐ │ Kubernetes │ └─────────────┘

三、Jenkins 流水线

3.1 Jenkinsfile

// Jenkinsfilepipeline{agent any environment{REGISTRY='registry.example.com'IMAGE_NAME='order-service'IMAGE_TAG="${env.BUILD_NUMBER}"}stages{stage('Checkout'){steps{checkout scm}}stage('Build'){steps{sh'./mvnw clean package -DskipTests'}}stage('Test'){steps{sh'./mvnw test'}post{always{junit'**/target/surefire-reports/*.xml'}}}stage('SonarQube'){steps{withSonarQubeEnv('SonarQube'){sh'./mvnw sonar:sonar'}}}stage('Build Image'){steps{sh"docker build -t${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}."}}stage('Push Image'){steps{withCredentials([usernamePassword(credentialsId:'registry-credentials',usernameVariable:'USER',passwordVariable:'PASS')]){sh"docker login -u${USER}-p${PASS}${REGISTRY}"sh"docker push${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"}}}stage('Deploy to Dev'){steps{sh"kubectl set image deployment/${IMAGE_NAME}${IMAGE_NAME}=${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}-n dev"}}stage('Deploy to Prod'){when{branch'main'}input{message"Deploy to Production?"ok"Deploy"}steps{sh"kubectl set image deployment/${IMAGE_NAME}${IMAGE_NAME}=${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}-n prod"}}}post{success{slackSend(color:'good',message:"Build${IMAGE_TAG}succeeded!")}failure{slackSend(color:'danger',message:"Build${IMAGE_TAG}failed!")}}}

四、GitLab CI/CD

4.1 .gitlab-ci.yml

stages:-build-test-package-deployvariables:REGISTRY:registry.example.comIMAGE_NAME:order-servicebuild:stage:buildimage:maven:3.8-openjdk-11script:-mvn clean package-DskipTestsartifacts:paths:-target/*.jarexpire_in:1 hourtest:stage:testimage:maven:3.8-openjdk-11script:-mvn testartifacts:reports:junit:target/surefire-reports/*.xmlsonarqube:stage:testimage:maven:3.8-openjdk-11script:-mvn sonar:sonar-Dsonar.host.url=$SONAR_URL-Dsonar.login=$SONAR_TOKENdocker-build:stage:packageimage:docker:latestservices:-docker:dindscript:-docker login-u $REGISTRY_USER-p $REGISTRY_PASS $REGISTRY-docker build-t $REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA .-docker push $REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHAdeploy-dev:stage:deployimage:bitnami/kubectl:latestscript:-kubectl set image deployment/$IMAGE_NAME $IMAGE_NAME=$REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA-n devenvironment:name:developmentonly:-developdeploy-prod:stage:deployimage:bitnami/kubectl:latestscript:-kubectl set image deployment/$IMAGE_NAME $IMAGE_NAME=$REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHA-n prodenvironment:name:productionwhen:manualonly:-main

五、最佳实践

5.1 分支策略

main (生产) │ ├── develop (开发) │ │ │ ├── feature/xxx (功能) │ ├── feature/yyy │ │ │ └── release/x.x (发布) │ └── hotfix/xxx (修复)

5.2 流水线原则

1. 快速反馈:CI 阶段 < 10分钟 2. 自动化测试:单元测试 + 集成测试 3. 安全扫描:代码扫描 + 镜像扫描 4. 环境隔离:Dev → Test → Staging → Prod 5. 回滚机制:一键回滚

5.3 质量门禁

# 质量门禁配置quality-gates:unit-test-coverage:80%sonar-quality-gate:truesecurity-vulnerabilities:0 criticaldocker-image-scan:pass

总结

CI/CD 概述:持续集成、持续部署
GitOps 实践:声明式、版本化
Jenkins 流水线:Jenkinsfile 配置
GitLab CI/CD:.gitlab-ci.yml 配置
最佳实践:分支策略、质量门禁

下篇预告:云原生架构设计模式


作者:刘~浪地球
系列:云原生与容器(四)
更新时间:2026-04-15

http://www.jsqmd.com/news/645765/

相关文章:

  • BIOS性能优化关键设置项全解析:从超线程到虚拟化
  • 揭秘SITS2026 AI文案系统:如何在3秒内生成合规、高转化、品牌一致的营销文案?
  • 2026年动物无害化处理设备厂家口碑推荐,环保无害化设备/小型无害化处理设备/大型无害化处理设备/畜牧无害化处理设备/养殖场无害化处理设备 - 品牌策略师
  • 2026年云南昆明企业财税一站式服务全生命周期合规托管深度评测指南 - 精选优质企业推荐榜
  • PPTist终极指南:3大核心优势+5分钟上手,打造专业级在线演示文稿
  • Kubernetes Node 污点与调度分析
  • 音频修复技术突破:使用VoiceFixer实现通用语音恢复的实践指南
  • 酷狗音乐API完整指南:如何快速构建专业级音乐应用
  • **图数据库实战:用 Neo4j 实现社交网络关系挖掘与高效查询优化**在现代数据驱动的应用场景中,**图数据库**正成为处
  • Kubernetes Kernel / sysctl / Kernel Modules 信息汇总 - 小镇
  • 小说下载器终极指南:三步实现全网小说免费离线阅读
  • 2026年云南中小企业财税服务全生命周期管理深度横评与选购指南 - 精选优质企业推荐榜
  • 从iOS到Mac:PlayCover如何重塑Apple Silicon上的移动应用生态
  • 多模态审核已失效?SITS2026最新实测数据揭示92%平台仍在用单模态“伪AI”风控
  • 终极游戏光标增强指南:YoloMouse让你的鼠标在游戏中无所遁形
  • Dockerfile实战:从零构建轻量级JDK1.8运行环境
  • 为什么92%的AI团队在多模态融合上失败?SITS2026首席架构师亲述:4个被忽略的数据-模型-部署断层及72小时修复方案
  • 共享内存
  • 不只是下载:手把手教你读懂FaceForensics++数据集结构与文件组织逻辑
  • 如何找上海正规普拉提培训?2026 专业机构推荐 - 品牌2025
  • Pix2Pix实战:用PatchGAN判别器提升图像翻译质量,为什么它比普通判别器更有效?
  • 精准控温 vs 强力通风:2026适配电子厂与食品厂工业空调厂家推荐 - 品牌2026
  • Beyond Compare 5 密钥生成器终极指南:快速免费获取完整授权
  • AutoSubs终极指南:6步实现Davinci Resolve AI自动字幕,效率提升10倍
  • 【工业级多模态灰度框架】:基于OpenTelemetry+Prometheus+自定义模态置信度探针的实时可观测方案
  • 2026年云南企业财税全生命周期服务深度对标:工商注册、代理记账、资质代办、税务筹划完整选型指南 - 精选优质企业推荐榜
  • OpenWrt防火墙配置避坑指南:从零开始手把手教你设置NAT和端口转发
  • AssetStudio深度解析:Unity游戏资源提取与逆向工程的专业工具
  • Axure RP中文界面终极解决方案:5分钟免费汉化全系列版本
  • M3U8视频下载器5.0跨平台支持win,linx,mac,docker