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

如何在Kubernetes的deployment.yml清单中动态或通过变量定义镜像名

解决方案

方案1:直接使用KubernetesManifest@0任务的镜像替换能力

你当前使用的KubernetesManifest@0任务本身就支持自动匹配清单里的镜像名并替换,不需要在deployment.yml里提前写变量,操作步骤:

  1. 先在你的Azure DevOps管道的变量区域定义两个变量:
    • RegistryName:值为你的ACR地址,比如xxxx.azurecr.io
    • RepositoryName:值为你的镜像仓库名,比如werepo
  2. 把你的deployment.yml里的image字段先填一个占位值即可:
image: placeholder/worker:latest
  1. 然后修改你的部署任务的containers参数,引用你定义的变量即可:
- task: KubernetesManifest@0
  displayName: Deploy to Kubernetes cluster
  inputs:
    action: deploy
    kubernetesServiceConnection: 'XXXX-connection'
    namespace: 'XXXX-namespace'
    manifests: |
      $(Pipeline.Workspace)/manifests/deployment.yml 
    containers: |
      $(RegistryName)/$(RepositoryName):$(Build.BuildNumber) 

任务运行时会自动把清单里的镜像地址替换成你containers参数里传的完整镜像地址,不需要自行处理变量替换逻辑。


方案2:用管道变量替换功能直接替换yml里的$(变量名)

如果你要保留deployment.yml里的$(RegistryName)/$(RepositoryName):$(Build.BuildNumber)写法,直接在管道里定义对应变量即可:

  1. 在管道「变量」页添加两个变量:
    • 名称:RegistryName,值:你的ACR地址
    • 名称:RepositoryName,值:你的镜像仓库名
      如果是多环境部署,还可以给变量设置环境作用域,不同环境用不同的仓库地址
  2. Azure DevOps管道运行时会自动把文件里$(变量名)格式的占位符替换成你定义的变量值,不需要额外操作,直接运行部署任务即可正常识别。

方案3:用sed命令手动替换(适用于更灵活的自定义场景)

如果你需要更灵活的控制,在部署任务之前加一个Bash任务执行替换即可:

sed -i "s/\$(RegistryName)/$(RegistryName)/g" $(Pipeline.Workspace)/manifests/deployment.yml
sed -i "s/\$(RepositoryName)/$(RepositoryName)/g" $(Pipeline.Workspace)/manifests/deployment.yml

执行完这个任务后,yml里的变量就会被替换成实际值,再运行部署任务即可正常运行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:27:04