目标:发布通用 Docker 镜像;将镜像部署到具有不同配置的多个操作环境(k8s 命名空间)。
我正在使用 KubernetesManifest@0 任务在 k8s 命名空间中创建和填充 k8s 密钥。我有 100 个命名空间来代表不同的客户环境。在运行 KubernetesManifest@0 任务来填充kubernetesServiceConnection:之前,我在任务中使用了 bash 脚本。具体来说,bash 脚本使用 az devops cli 为我要部署 k8s 密钥的 k8s 命名空间检索正确的完整服务连接名称。
问题:KubernetesManifest@0 任务似乎需要kubernetesServiceConnection: at Pipeline YAML compile time的值。看来我无法为kubernetesServiceConnection: during run time生成值。
如何在运行时自动设置kubernetesServiceConnection:?
错误: 出现资源授权问题:“管道无效。作业Deploy_Dev:步骤输入kubernetesServiceConnection引用服务连接$(kubernetesServiceConnection) 找不到。服务连接不存在或未被授权使用。
我的代码:
- deployment: Deploy_Dev
pool:
vmImage: $(vmImageName)
dependsOn: Derive_Variable_Values
variables:
kubernetesServiceConnection: $[ dependencies.Derive_Variable_Values.outputs['deriveVariableValues.kubernetesServiceConnection'] ]
environment: $(devOpsEnvironment)
strategy:
runOnce:
deploy:
steps:
- checkout: self
displayName: Checkout $(Build.Repository.Name)
此 bash 脚本显示 kubernetesServiceConnection 扩展为我的特定服务连接名称的正确字符串
- task: Bash@3
displayName: Echo kubernetesServiceConnection
inputs:
targetType: 'inline'
script: |
echo kubernetesServiceConnection is $(kubernetesServiceConnection)
上面的 echo 为 kubernetesServiceConnection 提供了正确的字符串
- task: KubernetesManifest@0
displayName: Create k8s secret with Key Vault values
inputs:
action: createSecret
secretType: generic
secretName: $(keyVaultSecretName)
secretArguments: --from-literal=kvclientid=$(kvClientId) --from-literal=kvclientsecret=$(kvClientSecret) --from-literal=kvurl=$(kvUrl)
kubernetesServiceConnection: $(kubernetesServiceConnection)
namespace: $(k8sFullNamespace)
kubernetesServiceConnection: $(kubernetesServiceConnection) 没有机会解决