Как передать переменные среды при развертывании в AKS из Azure DevOps

Я хочу развернуть собственный образ 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/начальную пользовательскую конфигурацию для этого контейнера?

Не уверен, куда вы хотите передать эти переменные. Можете ли вы уточнить это?

Krzysztof Madej 11.12.2020 12:40

Это хороший вопрос. Я тоже хотел бы это знать. Azure DevOps создает манифесты. Обычно вы указываете эти переменные. Однако я не вижу способа вводить их здесь.

Marco 11.12.2020 13:38
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
2
2
2 850
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

https://learn.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

Мой вклад в комментарий Tummala заключается в том, что если у вас есть контроль над тем, как создается образ докера, я предлагаю вместо этого добавить переменные env оттуда. Поэтому, если у вас есть сборка докера, которая запускается при фиксации ветки разработки, вы можете просто передать эту среду в этот образ докера.

У меня есть специальный пост, посвященный CI/CD в Azure DevOps, на случай, если вам интересно: Построение конвейеров CI/CD для Kubernetes с помощью Azure DevOps и GitFlow.

если вы встроите переменные в докер, вы не сможете развернуть один и тот же образ в другой среде.

Pawel 17.03.2021 12:20

Лучший вариант для установки переменной во время выполнения, а не во время сборки для принципала приложения с 12 факторами.

Will 25.04.2022 15:45

Другие вопросы по теме