将AzureCLI @ 2的输出用作Azure DevOps管道中的变量

时间:2019-11-19 11:43:56

标签: azure azure-devops

我在git的项目根目录中有一个azure-pipelines.yml文件。 在此文件中,我想将下一个任务中一个任务的输出用作变量。 我的任务

'ngsw-worker.js'

在powershell中运行此az命令时,我得到以下回报:

- task: AzureCLI@2
            displayName: 'List info on read policy in DEV'
            name: myOutput
            inputs:
              azureSubscription: mySub
              scriptType: ps
              scriptLocation: inlineScript
              inlineScript: az servicebus topic authorization-rule keys list --resource-group myRG --namespace-name mySB --topic-name myTopic --name Listen

我也确实在管道的日志中得到了此输出。 根据{{​​3}},我确实希望能够在下一步中使用它。 例如:

{
  "aliasPrimaryConnectionString": null,
  "aliasSecondaryConnectionString": null,
  "keyName": "Listen",
  "primaryConnectionString": "Endpoint=sb://someKey",
  "primaryKey": "somePrimaryKey",
  "secondaryConnectionString": "Endpoint=sb://another key",
  "secondaryKey": "someSecondaryKey"
}

日志没有给我带来什么,而不是获取primaryConnectionString的值:

- script: echo $(myOutput.primaryConnectionString)

为什么变量名没有用primaryConnectionString的值替换?

1 个答案:

答案 0 :(得分:0)

因为您错过了 Azure Cli 任务中设置的变量。

在指定任务执行期间生成的变量的生命周期仅在任务执行阶段。这意味着,一旦任务完成,变量将消失。如果您希望它可用于下一个任务,则需要使用脚本将其设置为输出变量。这就是你错过的。

实际上,在您指出的doc中,它使用上下文来说明这一点:

enter image description here


要将命令输出设置为变量并由下一个任务使用,请使用以下脚本:

for item in line_list:
    common = list(set(line_list[0]).intersection(line_list[2:]))
    print (common)

FOR /F "tokens=* USEBACKQ" %%F IN (`{your command}`) DO (
SET var=%%F
)
echo "##vso[task.setvariable variable=testvar;]%var%"

查看此线程:Set Output Variable in Azure CLI task on VSTS。还有另一个用户提出了类似的要求。


更新

根据评论,是,请在call {your command}>tmpFile1 set /p myvar= < tmpFile1 echo "##vso[task.setvariable variable=testvar;]%myvar%" 中输入上述脚本。像这样:

enter image description here

此外,不确定您是否熟悉上述脚本,在这里我对这些脚本进行了一些更改,以使其可供您使用:

input:inlinescript

您要传递给下一个任务的是SETLOCAL ENABLEDELAYEDEXPANSION SET count=1 FOR /F "tokens=* USEBACKQ" %%F IN (`call az servicebus topic authorization-rule keys list --resource-group Wicresoft-Support --namespace-name merlin1120 --topic-name mytopic --name myname`) DO ( SET var!count!=%%F SET /a count=!count!+1 ) ECHO %var5% echo "##vso[task.setvariable variable=testvar;]%var5%" ENDLOCAL ,其编号为5。因此,primaryConnectionString的值是5。

在下一个任务中查看我的输出:

enter image description here