【问题标题】:How to pass in environment variables when deploying to AKS from Azure DevOps从 Azure DevOps 部署到 AKS 时如何传入环境变量
【发布时间】:2020-12-11 09:31:48
【问题描述】:

我想部署一个自定义 SQL Server 映像,它需要使用以下管道定义将 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 / 初始用户配置,我该怎么做?

【问题讨论】:

  • 不确定要将这些变量传递到哪里。你能详细说明一下吗?
  • 这是个好问题。我也想知道。Azure DevOps 正在生成清单。在 tehre 中,您通常会指定这些变量。但是我看不到将它们注入这里的方法。

标签: kubernetes azure-devops azure-aks


【解决方案1】:

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/kubernetes-manifest?view=azure-devops#deploy-action

kubernetes-manifest 部署操作没有添加额外环境变量的选项。随时通过https://github.com/microsoft/azure-pipelines-tasks/issues 提出功能请求

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

【讨论】:

    【解决方案2】:

    我对 Tummala 评论的贡献是,如果您可以控制 docker 映像的构建方式,我建议从那里添加 env 变量。因此,如果您在开发分支上提交时触发了 docker 构建,则可以将该 env 传递给该 docker 映像。

    我有一篇专门讨论 Azure DevOps 中的 CI/CD 的帖子,如果你感兴趣的话:Building CI/CD pipelines for Kubernetes with Azure DevOps and GitFlow

    【讨论】:

    • 如果您将变量嵌入到 docker 中,您将无法将相同的映像部署到不同的环境。
    猜你喜欢
    • 1970-01-01
    • 2020-04-02
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多