You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建K8s Deployment时拉取DockerHub最新镜像标签的方法

解决方案:自动拉取DockerHub最新镜像到K8s集群

方案1:推送镜像时同时打latest标签

你当前只推送了带构建号的镜像标签,没有生成latest标签,所以拉取:latest会报错。修改Jenkins流水线的推送阶段,在推送构建号标签的同时,给镜像打latest标签并推送:

:: 为当前构建镜像添加latest标签
bat 'docker tag %docker_username%/devops-integration:%BUILD_NUMBER% %docker_username%/devops-integration:latest'
:: 推送两个标签至DockerHub
bat 'docker push %docker_username%/devops-integration:%BUILD_NUMBER%'
bat 'docker push %docker_username%/devops-integration:latest'

然后更新Deployment配置:

- name: spring-boot-kubernetes
  image: test/devops-integration:latest
  imagePullPolicy: Always  # 强制每次拉取最新的latest镜像
  ports:
    - containerPort: 8080

注意:imagePullPolicy: Always会让K8s每次创建Pod时都从DockerHub拉取镜像,确保拿到最新版本。若使用IfNotPresent,K8s只会在本地无该镜像时才拉取,可能复用旧镜像。

方案2:Jenkins流水线动态更新Deployment镜像标签

此方案无需依赖latest标签,直接用Jenkins的BUILD_NUMBER动态更新K8s Deployment的镜像版本,精准可控:

  1. 确保Jenkins服务器能访问Minikube集群(可将Minikube的kubeconfig配置到Jenkins全局工具或流水线环境中)
  2. 在Jenkins流水线中添加更新Deployment的阶段:
:: 更新Deployment的镜像为当前构建版本
bat 'kubectl set image deployment/<你的Deployment名称> spring-boot-kubernetes=%docker_username%/devops-integration:%BUILD_NUMBER%'

替换<你的Deployment名称>为实际Deployment名称,该命令会直接修改K8s中Deployment的镜像标签,触发Pod滚动更新,自动拉取最新构建的镜像。

方案3:用Helm管理Deployment(适合复杂场景)

若应用配置较复杂,可使用Helm包管理工具,通过Jenkins传递构建号参数更新镜像:

  1. 为应用创建Helm Chart,在values.yaml中定义镜像标签变量:
image:
  repository: test/devops-integration
  tag: "latest"
  1. 在Jenkins流水线中执行Helm更新命令:
bat 'helm upgrade <你的Release名称> <Chart路径> --set image.tag=%BUILD_NUMBER%'

该方案可统一管理所有K8s资源配置,更适合规模化应用部署。

内容的提问来源于stack exchange,提问作者ServletException

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:57:43