从 Azure DevOps 部署到 AKS 时如何传入环境变量
How to pass in environment variables when deploying to AKS from Azure DevOps
我想部署自定义 SQL 服务器映像,它需要使用以下管道定义将 4 个环境变量传递给 AKS:
jobs:
- deployment: Deploy
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: 'xxxx.default'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
namespace: $(k8sNamespace)
secretName: $(imagePullSecret)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
namespace: $(k8sNamespace)
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
在这个实例中,清单文件是由 Azure DevOps 创建的,那么如果我想为这个容器注入 SA_Password / 初始用户配置,我该怎么办?
kubernetes-manifest 部署操作没有添加额外环境变量的选项。欢迎在 https://github.com/microsoft/azure-pipelines-tasks/issues
打开功能请求
您可以做两个选择,使用 yq (https://github.com/mikefarah/yq) 编写脚本以在部署前更新清单文件
或使用 KubernetesManifest 补丁选项 (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/kubernetes-manifest?view=azure-devops#patch-action),例如
steps:
- task: KubernetesManifest@0
displayName: Patch
inputs:
action: patch
kind: pod
name: demo-5fbc4d6cd9-pgxn4
mergeStrategy: strategic
patch: '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"SA_Password","value":"1234"}]}]}}}}'
kubernetesServiceConnection: someK8sSC
namespace: default
我对 Tummala 评论的贡献是,如果您可以控制 docker 图像的构建方式,我建议改为从那里添加环境变量。因此,如果您有一个 docker 构建在开发分支上提交时触发,您可以将该环境传递给那个 docker 图像。
我有专门的 post 讨论 Azure DevOps 中的 CI/CD,如果您对以下内容感兴趣:Building CI/CD pipelines for Kubernetes with Azure DevOps and GitFlow。
我想部署自定义 SQL 服务器映像,它需要使用以下管道定义将 4 个环境变量传递给 AKS:
jobs:
- deployment: Deploy
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: 'xxxx.default'
strategy:
runOnce:
deploy:
steps:
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
namespace: $(k8sNamespace)
secretName: $(imagePullSecret)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
namespace: $(k8sNamespace)
manifests: |
$(Pipeline.Workspace)/manifests/deployment.yml
$(Pipeline.Workspace)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
在这个实例中,清单文件是由 Azure DevOps 创建的,那么如果我想为这个容器注入 SA_Password / 初始用户配置,我该怎么办?
kubernetes-manifest 部署操作没有添加额外环境变量的选项。欢迎在 https://github.com/microsoft/azure-pipelines-tasks/issues
打开功能请求您可以做两个选择,使用 yq (https://github.com/mikefarah/yq) 编写脚本以在部署前更新清单文件
或使用 KubernetesManifest 补丁选项 (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/kubernetes-manifest?view=azure-devops#patch-action),例如
steps:
- task: KubernetesManifest@0
displayName: Patch
inputs:
action: patch
kind: pod
name: demo-5fbc4d6cd9-pgxn4
mergeStrategy: strategic
patch: '{"spec":{"template":{"spec":{"containers":[{"env":[{"name":"SA_Password","value":"1234"}]}]}}}}'
kubernetesServiceConnection: someK8sSC
namespace: default
我对 Tummala 评论的贡献是,如果您可以控制 docker 图像的构建方式,我建议改为从那里添加环境变量。因此,如果您有一个 docker 构建在开发分支上提交时触发,您可以将该环境传递给那个 docker 图像。
我有专门的 post 讨论 Azure DevOps 中的 CI/CD,如果您对以下内容感兴趣:Building CI/CD pipelines for Kubernetes with Azure DevOps and GitFlow。