Получение значений из выходных данных задачи Azure DevOps Release Pipeline

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

По сути, в моем конвейере выпуска есть задание под названием «Задание 1». У него 2 задачи:

Задание 1: Разверните контейнер в кластере AKS и предоставьте доступ к нему через внутренний LoadBalancer.

steps:
- task: Kubernetes@1
  displayName: Deployment
  inputs:
    connectionType: 'Azure Resource Manager'
    azureSubscriptionEndpoint: 'MY-SUBSCRIPTION'
    azureResourceGroup: 'MY-RESOURCEGROUP
    kubernetesCluster: 'MY-AKS-CLUSTER'
    namespace: 'MY-NAMESPACE'
    command: apply
    useConfigurationFile: true
    configuration: '$(System.DefaultWorkingDirectory)/_TEST/deployment.yaml'

Примечание. Я проверил параметр, чтобы включить функцию выходных переменных Поле вывода.

Задача 2: Создайте и настройте API в разделе управления API, установив этот внутренний LoadBalancer в качестве серверной части.

Задача 1 дает мне внутренний IP-адрес LoadBalancer через его выходной файл json. Выходной JSON-файл

Я хотел бы получить этот IP-адрес и использовать его в Задаче 2, которая выполняет следующую команду:

az apim api create --service-name $(apimanagement) -g $(apim-resourcegroup) --api-id $(apiname) --path $(apiname) --display-name $(apiname) --service-url http://_LBIPADDRESS_/openapi.json --subscription-key-required false

Мой вопрос: Как сделать эту ссылку в параметре --service-url?

Любое предложение будет оценено. Благодарю вас!

С наилучшими пожеланиями, Дэйвид

Привет, Дэвид, и добро пожаловать в Stack Overflow! Можно поинтересоваться, что за задача 1? В зависимости от типа задачи он может определить выходная переменная с нужным вам значением.

Vince Bowdren 06.05.2022 18:18

Привет Винс! Большое спасибо! Это встроенное действие kubectl. Я только что добавил его в описание темы, чтобы дать больше деталей. Не могли бы вы предложить, как сослаться на IP-адрес LoadBalancer, созданный в задаче 1, и применить его к параметру --service-url в задаче 2?

David 06.05.2022 18:56
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
0
2
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Задача Kubernetes имеет выходную переменную, в вашем случае называемую развертывание.KubectlOutput, которая должна иметь упомянутые вами данные json. Небольшой скрипт — хороший способ получить IP-адрес из этой структуры json в одну переменную конвейера; в этом случае я пишу сценарии в powershell, но вы можете использовать bash, если это лучше подходит для вашей среды.

task: Powershell@2
  displayName: Extract IP Address
  inputs:
    targetType: inline
    script: |
      $outputData = $(deployment.KubectlOutput) | ConvertFrom-Json;
      $ipAddress = $outputData.status.loadBalancer.ingress.ip;
      Write-Host "##vso[task.setvariable variable=_LBIPADDRESS_;isOutput=true;]$ipAddress"

Это создает переменную конвейера с именем LБИПАДРЕС с нужным вам значением; затем ваша следующая задача может ссылаться на него так же, как и на все другие переменные конвейера:

    az apim api create `
      --service-name $(apimanagement) `
      -g $(apim-resourcegroup) `
      --api-id $(apiname) `
      --path $(apiname) `
      --display-name $(apiname) `
      --service-url "http://$(_LBIPADDRESS_)/openapi.json" `
      --subscription-key-required false          

Примечание. Я обратился к другим вопросам о переполнении стека, которые касались задачи Kubernetes и выходных переменных; они также могут быть вам полезны:

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