В конвейере Azure DevOps возникает сбой при появлении запроса на вход в устройство во время развертывания Helm в AKS

Я пытаюсь развернуть приложение Helm в кластере AKS с помощью конвейера Azure DevOps. Однако конвейер завершается сбоем из-за запроса на вход в систему устройства. Вот соответствующий раздел моего YAML-файла конвейера:

pool:
  name: '*'  

variables:
  AKS_RESOURCE_GROUP: '*' 
  AKS_CLUSTER_NAME: '*' 
  KUBECONFIG: $(Build.SourcesDirectory)/kubeconfig
  HELM_RELEASE_NAME: '*'  
  HELM_CHART_PATH: '*'  
  HELM_NAMESPACE: '*' 

stages:
- stage: Deploy
  jobs:
  - job: DeployToAKS
    steps:
    - task: AzureCLI@2
      inputs:
        azureSubscription: '*'
        scriptType: 'bash'
        scriptLocation: 'inlineScript'
        inlineScript: |
          # Get AKS credentials and configure kubectl context
          az aks get-credentials --resource-group $(AKS_RESOURCE_GROUP) --name $(AKS_CLUSTER_NAME) --file $(KUBECONFIG)

          # Set KUBECONFIG environment variable
          export KUBECONFIG=$(KUBECONFIG)

          # Upgrade the existing Helm release or install if it doesn't exist
          helm upgrade --install $(HELM_RELEASE_NAME) $(HELM_CHART_PATH) --namespace $(HELM_NAMESPACE) --kubeconfig $(KUBECONFIG) --values $(HELM_CHART_PATH)/values.yaml

          # (Optional) Verify the deployment by checking the Helm release status
          helm status $(HELM_RELEASE_NAME) --namespace $(HELM_NAMESPACE) --kubeconfig $(KUBECONFIG)
      displayName: 'Deploy Helm Application to AKS'

Однако когда я запускаю этот конвейер, он терпит неудачу со следующей ошибкой:

[Error] The operation was canceled.
WARNING: Merged "my cluster name" as current context in /home/myazureuser/myagent/_work/8/s/kubeconfig
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code C5D7UEJAFF to authenticate.

Я проверил, что субъект-служба подключения к службе имеет необходимые разрешения для доступа к кластеру AKS.

Как я могу изменить свой конвейер Azure DevOps или конфигурацию субъекта-службы, чтобы избежать запроса на вход в систему устройства и разрешить конвейеру работать в неинтерактивном режиме? Любая помощь или предложения будут очень признательны!


50
1

Ответ:

Решено

Вы можете использовать задачу Kubernetes@1 с командой login для аутентификации в AKS.

Пример кода yaml:

pool:
 name: wadepool

variables:
  ServiceConnection: ARMConn1
  AKSCluster: wadeAKS1
  ResourceGroup: YourResourceGroup
  HELM_RELEASE_NAME: 'clamav'  
  HELM_CHART_PATH: './charts/clamav/'
  HELM_NAMESPACE: 'nmsw-dev' 

steps:
- task: Kubernetes@1
  inputs:
    connectionType: 'Azure Resource Manager'
    azureSubscriptionEndpoint: '$(ServiceConnection)'
    azureResourceGroup: '$(ResourceGroup)'
    kubernetesCluster: '$(AKSCluster)'
    useClusterAdmin: true
    command: 'login'

- task: HelmInstaller@1
  inputs:
    helmVersionToInstall: 'latest'

- task: AzureCLI@2
  inputs:
    azureSubscription: $(ServiceConnection)
    scriptType: bash
    scriptLocation: inlineScript
    inlineScript: |
      echo "Setting up AKS credentials"
      az aks get-credentials --resource-group $(ResourceGroup) --name $(AKSCluster) --overwrite-existing
      kubectl config use-context $(AKSCluster)

      # Upgrade the existing Helm release or install if it doesn't exist
      helm upgrade --install $(HELM_RELEASE_NAME) $(HELM_CHART_PATH) --namespace $(HELM_NAMESPACE) --values $(HELM_CHART_PATH)/values.yaml

      # (Optional) Verify the deployment by checking the Helm release status
      helm status $(HELM_RELEASE_NAME) --namespace $(HELM_NAMESPACE)
  displayName: 'Set up AKS Credentials and Test Connection'

Конвейер работает, я не указал $(KUBECONFIG) со своей стороны: