CI/CD实战 - 一行代码自动上线,GitHub Actions + Docker + K8S全搞定!⚡

第14天:CI/CD实战 - 一行代码自动上线,GitHub Actions + Docker + K8S全搞定!⚡

一、最简单的CI/CD流水线(3步上线)

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

传统发布 vs 现代CI/CD:

传统: 代码写完 → 打包 → 传给运维 → 登录服务器 → 停服务 → 上传 → 启动 → 祈祷 🙏 CI/CD: 代码push → 自动构建 → 自动测试 → 自动部署 → 自动通知 ✅

二、10分钟搭建完整流水线

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

步骤1:GitHub仓库配置

  1. 打开你的GitHub仓库
  2. 点 Settings → Secrets and variables → Actions
  3. 添加这些密钥:
    • DOCKER_USERNAME:Docker Hub用户名
    • DOCKER_PASSWORD:Docker Hub密码
    • KUBECONFIG:K8S配置文件(base64编码)

步骤2:创建CI/CD配置文件

在项目根目录创建:.github/workflows/deploy.yml

name:Deploy to Kuberneteson:push:branches:[main]# main分支推送时触发pull_request:branches:[main]# PR时也触发测试jobs:# 1. 测试阶段test:runs-on:ubuntu-lateststeps:-name:检出代码uses:actions/checkout@v3-name:设置JDKuses:actions/setup-java@v3with:java-version:'17'-name:运行测试run:|mvn clean test echo "✅ 测试通过!"# 2. 构建镜像阶段build:needs:test# 依赖test阶段runs-on:ubuntu-lateststeps:-name:检出代码uses:actions/checkout@v3-name:设置JDKuses:actions/setup-java@v3with:java-version:'17'-name:构建JAR包run:mvn clean package-DskipTests-name:登录Docker Hubuses:docker/login-action@v2with:username:${{secrets.DOCKER_USERNAME}}password:${{secrets.DOCKER_PASSWORD}}-name:构建并推送Docker镜像run:|# 构建镜像 docker build -t ${{ secrets.DOCKER_USERNAME }}/user-service:${{ github.sha }} .# 打标签docker tag ${{secrets.DOCKER_USERNAME}}/user-service:${{github.sha}}\ ${{secrets.DOCKER_USERNAME}}/user-service:latest# 推送到Docker Hubdocker push ${{secrets.DOCKER_USERNAME}}/user-service:${{github.sha}}docker push ${{secrets.DOCKER_USERNAME}}/user-service:latest echo "✅ 镜像推送完成!"# 3. 部署到K8S阶段deploy:needs:build# 依赖build阶段runs-on:ubuntu-lateststeps:-name:检出代码uses:actions/checkout@v3-name:设置K8S配置run:|# 创建.kube目录 mkdir -p ~/.kube# 写入K8S配置(从GitHub Secrets读取)echo "${{secrets.KUBECONFIG}}"|base64-d>~/.kube/config# 测试连接kubectl cluster-info echo "✅ K8S连接成功!"-name:部署到K8Srun:|# 替换镜像版本 sed -i "s|IMAGE_TAG|${{ github.sha }}|g" k8s/deployment.yaml# 应用配置kubectl apply-f k8s/# 等待部署完成kubectl rollout status deployment/user-service--timeout=300s echo "🎉 部署成功!服务已上线!"-name:发送通知if:always()run:|if [ "${{ job.status }}" = "success" ]; then echo "✅ 部署成功!" # 可以在这里集成钉钉/微信通知 else echo "❌ 部署失败!" fi

步骤3:创建Dockerfile(简单版)

# Dockerfile FROM openjdk:17-jdk-slim # 复制JAR包 COPY target/*.jar app.jar # 运行应用 ENTRYPOINT ["java", "-jar", "/app.jar"]

步骤4:创建K8S配置文件

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。
创建k8s/目录,里面放这些文件:

# k8s/deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:user-servicespec:replicas:2# 2个副本selector:matchLabels:app:user-servicetemplate:metadata:labels:app:user-servicespec:containers:-name:user-serviceimage:你的用户名/user-service:IMAGE_TAG# GitHub Actions会替换ports:-containerPort:8080resources:requests:memory:"512Mi"cpu:"250m"limits:memory:"1Gi"cpu:"500m"livenessProbe:httpGet:path:/actuator/healthport:8080initialDelaySeconds:60periodSeconds:10readinessProbe:httpGet:path:/actuator/health/readinessport:8080initialDelaySeconds:30periodSeconds:5
# k8s/service.yamlapiVersion:v1kind:Servicemetadata:name:user-servicespec:selector:app:user-serviceports:-port:80targetPort:8080type:ClusterIP
# k8s/hpa.yaml(自动扩缩容)apiVersion:autoscaling/v2kind:HorizontalPodAutoscalermetadata:name:user-service-hpaspec:scaleTargetRef:apiVersion:apps/v1kind:Deploymentname:user-serviceminReplicas:2maxReplicas:10metrics:-type:Resourceresource:name:cputarget:type:UtilizationaverageUtilization:70

步骤5:一键部署

# 提交代码gitadd.gitcommit -m"添加CI/CD配置"gitpush origin main# 然后去GitHub Actions页面看进度# 打开 https://github.com/你的用户名/你的仓库/actions

三、高级功能(按需添加)

零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

1. 金丝雀发布(逐步放量)

# 在deploy步骤中添加-name:金丝雀发布run:|# 1. 先部署1个副本 kubectl set image deployment/user-service \ user-service=你的用户名/user-service:${{ github.sha }}# 2. 等待健康检查sleep 30# 3. 扩容到2个副本kubectl scale deployment/user-service--replicas=2 echo "🟡 金丝雀发布完成,观察5分钟..." sleep 300# 4. 全量发布kubectl scale deployment/user-service--replicas=4 echo "✅ 全量发布完成!"

2. 自动回滚(出问题自动恢复)

-name:部署并监控run:|# 部署 kubectl apply -f k8s/# 监控5分钟for i in{1..30}; do# 检查Pod状态STATUS=$(kubectl get pods-l app=user-service-o jsonpath='{.items[0].status.phase}') if["$STATUS"!="Running"]; thenecho "❌ Pod状态异常:$STATUS,开始回滚..."# 回滚到上一个版本kubectl rollout undo deployment/user-service# 发送告警curl-X POST "钉钉机器人URL" \-H "Content-Type:application/json" \-d '{"msgtype":"text","text":{"content":"部署失败,已自动回滚"}}' exit 1 fi echo "监控中...($i/30)" sleep 10 done echo "✅ 部署成功,运行稳定"

3. 多环境部署(开发/测试/生产)

# 修改触发条件on:push:branches:-main# 生产环境-staging# 预发环境-develop# 开发环境# 添加环境判断-name:选择环境run:|if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then echo "ENV=production" >> $GITHUB_ENV echo "NAMESPACE=production" >> $GITHUB_ENV elif [[ "${{ github.ref }}" == "refs/heads/staging" ]]; then echo "ENV=staging" >> $GITHUB_ENV echo "NAMESPACE=staging" >> $GITHUB_ENV else echo "ENV=development" >> $GITHUB_ENV echo "NAMESPACE=development" >> $GITHUB_ENV fi-name:部署到对应环境run:|# 设置命名空间 kubectl create namespace ${{ env.NAMESPACE }} 2>/dev/null || true# 部署kubectl apply-f k8s/-n ${{env.NAMESPACE}}

四、GitHub Actions实用技巧

1. 缓存加速(构建快10倍)

-name:缓存Maven依赖uses:actions/cache@v3with:path:~/.m2key:maven-${{hashFiles('**/pom.xml')}}restore-keys:|maven--name:缓存Docker镜像uses:actions/cache@v3with:path:/tmp/.buildx-cachekey:buildx-${{github.sha}}

2. 矩阵测试(一次测多个版本)

test:strategy:matrix:java:['11','17']os:[ubuntu-latest,windows-latest]runs-on:${{matrix.os}}steps:-name:测试Java ${{matrix.java}}run:mvn test

3. 人工审批(生产部署需要确认)

deploy-production:runs-on:ubuntu-latestenvironment:production# 需要审批的环境steps:-name:等待审批run:echo "等待审批..."-name:部署到生产run:|echo "开始部署到生产环境..." # 部署逻辑

4. 定时任务(每天凌晨构建)

on:schedule:-cron:'0 2 * * *'# 每天凌晨2点

五、常见问题解决

1. Docker构建慢?

# 使用多阶段构建 + 缓存 FROM maven:3.8-openjdk-17 AS builder WORKDIR /app # 先只复制pom.xml,利用缓存 COPY pom.xml . RUN mvn dependency:go-offline -B # 再复制源代码 COPY src ./src RUN mvn clean package -DskipTests # 运行阶段 FROM openjdk:17-jdk-slim COPY --from=builder /app/target/*.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]

2. K8S部署失败?

# 查看部署状态kubectl get deployments kubectl get pods kubectl describe pod[pod名称]# 查看日志kubectl logs[pod名称]kubectl logs[pod名称]--previous# 查看之前容器的日志# 进入Pod调试kubectlexec-it[pod名称]-- /bin/sh# 查看事件kubectl get events --sort-by='.lastTimestamp'

3. 镜像拉取失败?

# 在deployment中添加imagePullSecretsspec:template:spec:imagePullSecrets:-name:regcred# 提前创建这个secret

创建secret:

kubectl create secret docker-registry regcred\--docker-server=你的仓库地址\--docker-username=你的用户名\--docker-password=你的密码

4. 内存不足?

# 调整资源限制resources:requests:memory:"256Mi"# 最小256MBcpu:"100m"# 最小0.1核limits:memory:"512Mi"# 最大512MBcpu:"500m"# 最大0.5核

六、完整实战案例

场景:用户服务CI/CD

项目结构: user-service/ ├── src/ # 源代码 ├── target/ # 构建输出 ├── Dockerfile # Docker配置 ├── k8s/ # K8S配置 │ ├── deployment.yaml │ ├── service.yaml │ └── hpa.yaml ├── .github/workflows/ # GitHub Actions │ └── deploy.yml └── pom.xml

工作流程:

  1. 开发:写代码 → push到GitHub
  2. GitHub Actions
    • 自动运行测试
    • 自动构建Docker镜像
    • 自动推送到Docker Hub
    • 自动部署到K8S
  3. K8S
    • 自动拉取新镜像
    • 自动重启Pod
    • 自动健康检查
    • 自动扩缩容
  4. 通知:自动发送部署结果

监控看板:

在GitHub Actions页面,你可以看到:

  • ✅ 绿色:成功
  • ❌ 红色:失败
  • 🟡 黄色:进行中
  • 📊 图表:构建时间趋势

七、更简单的方案:使用现成模板

GitHub Marketplace有很多现成Action:

1. 一键部署到K8S

-name:Deploy to Kubernetesuses:azure/k8s-deploy@v1with:namespace:defaultmanifests:k8s/images:|your-username/your-image:${{ github.sha }}

2. 自动创建PR预览环境

-name:Create Preview Environmentuses:actions/github-script@v6with:script:|// 自动创建PR对应的环境 github.rest.actions.createWorkflowDispatch({ owner: context.repo.owner, repo: context.repo.repo, workflow_id: 'deploy-preview.yml', ref: context.ref })

3. 使用现成CI/CD服务

  • Vercel:前端项目,免费
  • Netlify:静态网站,免费
  • Heroku:后端项目,有免费额度
  • Railway:全栈项目,新手友好

八、今天学到什么?

核心思想:

  1. 自动化一切:能自动化的都自动化
  2. 快速反馈:失败快速发现,快速修复
  3. 频繁部署:小步快跑,降低风险
  4. 版本一致:开发=测试=生产

具体技能:

  1. ✅ GitHub Actions基础使用
  2. ✅ 自动化测试、构建、部署
  3. ✅ Docker镜像构建和推送
  4. ✅ K8S自动化部署
  5. ✅ 金丝雀发布和自动回滚
  6. ✅ 多环境管理

最佳实践:

  1. 代码即配置:所有配置都放Git
  2. 流水线即代码:CI/CD配置也放Git
  3. 失败优先:测试失败立即停止
  4. 渐进式发布:先1%,再10%,再100%
  5. 监控一切:部署后自动监控

九、明天预告

明天是最后一天!我们会:

  1. 项目实战:完整的电商微服务系统
  2. 性能优化:从100QPS到10000QPS
  3. 故障演练:模拟真实故障,如何应对
  4. 面试必备:微服务面试题大全
  5. 学习路线:下一步该学什么

明天见!🎉
零基础全栈开发Java微服务版本实战-后端-前端-运维-实战企业级三个实战项目

资源获取:关注公众号: 小坏说Java ,获取本文所有示例代码、配置模板及导出工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1183171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2026年上海杨浦区厨房电器社区店选购指南:告别油烟与噪音,精准匹配你的理想厨房 - 资讯焦点

张阿姨去年装修时,新装的油烟机轰鸣声像台拖拉机,但炒菜时油烟却一点没少往脸上扑,预约的安装师傅三次上门都没能把尺寸量对。这些厨房电器的糟心事,在杨浦区的老社区里并不少见。 当你在琳琅满目的厨房电器市场中…

基于「YOLO姿态识别 + AI大模型分析」的智能健身辅助系统(vue+flask+AI算法) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026年度空气能十大品牌权威榜单 - 资讯焦点

随着“双碳”目标推进和能源消费结构转型,空气能技术凭借其高效节能、绿色环保的显著优势,正成为清洁能源应用的重要方向。面对市场上琳琅满目的品牌,如何精准把握行业格局,选择真正可靠的品牌?本文基于技术创新、…

成都靠谱的展柜生产厂家推荐,看哪家工艺好? - 工业品牌热点

随着商业展览、文博场馆等场景对展柜需求的日益精细化,不少企业和机构在寻找展柜合作方时,都会被如何找到靠谱的展柜厂知名展柜厂的联系方式是什么这类问题困扰。本文围绕展柜厂选择的高频问题展开,结合成都盛世文博…

大润发购物卡如何回收变现,回收平台哪家好? - 资讯焦点

在数字化消费时代,谁家还没几张闲置的大润发购物卡呢?放着不用,它们就只能静静在角落“吃灰”;而高效变现,才是让这些卡券发挥价值的正确打开方式!据统计,全国每年沉淀的商超购物卡超800亿元,其中大润发购物卡…

2025年在上海现在墙面流行哪种装修材料?家悦可可装饰论坛圆桌分享 - 资讯焦点

2025年12月,上海进入老房翻新与精装改造高峰期。** 很多业主搜索"上海墙面流行哪种装修材料",本质是想在"颜值、预算、环保、工期"四者间找到平衡点。根据近期完成的100套上海家装案例统计,墙面…

重磅!基金委首次明确AI写标书规范,申请人对参考文献真实性负责!初审结果时间确定!

基金委首次明确2026年AI写标书规范2026年1月14日,基金委发布“关于2026年国家自然科学基金项目申请与结题等有关事项的通告”,其中明确提出生成式AI在标书写作中的规范:申请人在撰写申请书时,如果借助生成式人工智能技术跟踪研究动…

LED照明技术演进:智能化、健康化与个性化成新趋势

于现代照明范畴之内,LED技术凭借其具备高效节能特性、拥有较长寿命以及具有环保等诸多优势,已然成为了主流之选择。伴随市场持续发展以及消费者针对光环境所提要求得以提升,照明产品早已不再只是单纯满足于基本的照亮这一功能,而是…

2026香氛去屑洗发水推荐:如何告别头屑烦恼又持久留香? - 资讯焦点

你是否在寻找一款既能深层净化头皮,又能让发丝持久萦绕高级香氛的洗发水?面对头屑反复与香味转瞬即逝的双重困扰,许多人的日常洗护体验总难称心如意。今天,我们将深入探索一款将前沿香氛科技与植萃去屑专利融合的洗发…

1000元沃尔玛卡回收超实用的流程与价格表 - 淘淘收小程序

闲置卡券的合理处置的相关知识,值得深入了解。1000面值的沃尔玛卡作为常见卡券类型,闲置后通过回收方式处理十分普遍。掌握1000面值沃尔玛卡回收的流程与价格规律,能帮助更合理地处置这类闲置卡券。接下来,就为大家…

2026年1月最新正规实盘配 资券商Top3推荐:哪个品牌最值得信赖? - 资讯焦点

对于寻求杠杆操作的投资者而言,选择一家资质过硬、资金安全、服务透明的正规券商是首要前提。在香港市场中,财盛证券(中央编号:3222735)、永华证券(中央编号:3079243)与联华证券(中央编号:3224380)作为香港…

2026最新国内女装面料品牌top10排行榜!服务深度覆盖广东/东莞/中山/深圳等地优质公司及源头厂家权威榜单发布,品质服务双优助力女装面料采购 - 品牌推荐2026

引言 随着消费升级与时尚产业的快速迭代,女装面料市场对品质、功能性与创新设计的需求持续攀升,但行业存在的品质参差不齐、交货周期不稳定、功能性面料研发不足等问题仍影响下游品牌发展。据中国纺织工业联合会2025…

门窗十大品牌哪家质量好 透明报价终身售后 - 资讯焦点

门窗十大品牌哪家质量好 透明报价终身售后 行业背景与筛选依据 据《2025中国门窗行业发展白皮书》数据显示,国内民用门窗市场规模已突破1200亿元,年复合增长率达8.7%,消费者对门窗产品的质量、售后保障、透明报价的…

高压蒸汽灭菌器哪家好?行业知名品牌推荐 - 品牌推荐大师

在医疗、科研、制药及食品工业等领域,高压蒸汽灭菌器是保障无菌环境、守护实验与生产安全的核心设备。其性能稳定性、安全性与智能化水平直接决定了无菌处理效果,影响实验数据可靠性与产品质量。随着国产设备技术迭代…

2026最新国内棉布棉锦裤子面料品牌top10排行榜!服务深度覆盖广东/东莞/中山/深圳等地优质公司及源头厂家权威榜单发布,品质服务双优助力棉布棉锦裤子面料采购 - 品牌推荐2026

引言 随着国内服饰产业向“科技、时尚、绿色”转型深化,面料作为产业链核心环节,其品质稳定性、功能创新性与供应响应速度成为品牌竞争力的关键。据中国纺织工业联合会2025年度报告显示,国内棉布、棉锦等裤子面料市…

二十六、K8s集群备份恢复 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026年衡阳ISO安全管理体系认证机构排名 - 工业品牌热点

在当前竞争激烈的商业环境中,ISO认证已成为企业参与市场竞争的重要通行证——无论是招投标的加分项、大客户合作的敲门砖,还是内部管理升级的驱动力,选择专业的ISO管理体系认证咨询机构,都是企业绕不开的关键决策。…

jenkins 用来连接域账户校验 校验账户密码的账户的密码被更新后导致jenkins无法登录

先备份 config.xml再删除 config.xml 文件中的下面内容:<useSecurity>true</useSecurity> <authorizationStrategy class="hudson.security.ProjectMatrixAuthorizationStrategy"> </a…

2026香氛去屑洗发水推荐:阿道夫植萃净澈,旷野木香萦绕 - 资讯焦点

当头皮微生态失衡引发反复头屑与瘙痒,什么样的洗护产品才能从根源带来舒缓与洁净,同时满足对高雅气息的向往?这不仅是对功效的追求,更是对生活品质的探寻。阿道夫植物香氛洗发露(头皮去屑)的出现,精准回应了这一复合需…

2026最新国内布行品牌top10排行榜!服务深度覆盖广东/东莞/中山/深圳等地优质布行公司及源头厂家权威榜单发布,品质服务双优助力纺织采购 - 品牌推荐2026

引言 随着纺织行业的不断发展,消费者和企业对布行的产品品质、服务效率以及创新能力提出了更高要求。然而,市场上布行数量众多,产品质量参差不齐,服务水平也存在差异,给采购者带来了选择难题。据中国纺织工业联合…