Я новичок в 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?
Любое предложение будет оценено. Благодарю вас!
С наилучшими пожеланиями, Дэйвид
Привет Винс! Большое спасибо! Это встроенное действие kubectl. Я только что добавил его в описание темы, чтобы дать больше деталей. Не могли бы вы предложить, как сослаться на IP-адрес LoadBalancer, созданный в задаче 1, и применить его к параметру --service-url
в задаче 2?
Задача 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 и выходных переменных; они также могут быть вам полезны:
Привет, Дэвид, и добро пожаловать в Stack Overflow! Можно поинтересоваться, что за задача 1? В зависимости от типа задачи он может определить выходная переменная с нужным вам значением.