如何在Azure Pipeline中替换Kubernetes YAML文件的环境变量
可行实现方案
以下三种方案都可以实现需求,可根据你的流水线配置选择:
方案1:用sed命令直接替换(无需额外安装扩展)
直接在获取git哈希的任务后新增Bash任务,替换deployment.yaml中的固定值:
- task: Bash@3 displayName: 替换deployment.yaml中的GIT_HASH值 inputs: targetType: 'inline' script: | # 替换为你实际的deployment.yaml文件路径 sed -i "s/dummy_value/$(git-hash)/g" ./manifests/deployment.yaml
方案2:修正replacetokens任务配置
你之前使用replacetokens失败大概率是占位符格式不匹配,该扩展默认使用#{变量名}#作为占位符标识:
- 先修改你的
deployment.yaml中GIT_HASH的取值为占位符格式:
containers: - name: frontend env: - name: GIT_HASH value: #{git-hash}#
- 新增replacetokens任务配置如下:
- task: qetza.replacetokens.replacetokens-task.replacetokens@3 displayName: 替换manifest文件中的变量 inputs: rootDirectory: '$(Build.SourcesDirectory)' targetFiles: './manifests/deployment.yaml' # 替换为实际文件路径 encoding: 'auto' tokenPrefix: '#{' tokenSuffix: '}#' actionOnMissing: 'warn'
方案3:部署时直接注入环境变量(无需修改原yaml文件)
如果不想改动原始的deployment.yaml文件,可以在部署完成后直接用kubectl命令注入环境变量:
- task: Kubernetes@1 displayName: 注入GIT_HASH环境变量 inputs: kubernetesServiceEndpoint: '你的Rancher集群服务连接名' # 替换为你配置的集群连接名 namespace: '你的应用部署命名空间' command: 'set' arguments: 'env deployment/frontend GIT_HASH=$(git-hash)'
注意事项
如果获取git-hash变量的任务和后续替换/部署任务不在同一个作业/阶段,需要在设置变量时标记为输出变量:
将echo "##vso[task.setvariable variable=git-hash;]$short_hash"修改为echo "##vso[task.setvariable variable=git-hash;isOutput=true]$short_hash"
跨阶段引用时格式为$[stageDependencies.<阶段名>.outputs['<获取哈希任务名>.git-hash']]。
内容的提问来源于stack exchange,提问作者Nespony
相关产品推荐
相关产品推荐

