我在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的值替换?
答案 0 :(得分:0)
因为您错过了 Azure Cli 任务中设置的变量。
在指定任务执行期间生成的变量的生命周期仅在任务执行阶段。这意味着,一旦任务完成,变量将消失。如果您希望它可用于下一个任务,则需要使用脚本将其设置为输出变量。这就是你错过的。
实际上,在您指出的doc中,它使用上下文来说明这一点:
要将命令输出设置为变量并由下一个任务使用,请使用以下脚本:
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%"
中输入上述脚本。像这样:
此外,不确定您是否熟悉上述脚本,在这里我对这些脚本进行了一些更改,以使其可供您使用:
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。
在下一个任务中查看我的输出: