从 Azure DevOps 发布管道任务输出中获取值

Getting values from Azure DevOps Release Pipeline Task output

我是 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'

注意:我选中了启用输出变量功能的选项 Output Box。

任务 2: 在 API 管理中创建和配置 API,将内部 LoadBalancer 设置为后端。

任务 1 通过其输出 json 文件为我提供了内部 LoadBalancer 的 IP 地址。 Output json file

我想获取该 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 参数中进行引用?

如有任何建议,我们将不胜感激。谢谢!

此致, 大卫

Kubernetes 任务有一个输出变量,在你的例子中叫做 deployment.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"

这将创建一个名为 LBIPADDRESS 的管道变量,其中包含您需要的值;然后,您的下一个任务可以像引用所有其他管道变量一样引用它:

    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 任务和输出变量的堆栈溢出问题;它们也可能对您有用: