如何在 Azure DevOps 任务中使用 setVariable

问题描述 投票:0回答:1

我开发了一个 Azure DevOps (AzDO) 任务,它运行良好。 https://github.com/LanceMcCarthy/akeyless-extension-azdo

但是,还有最后一个令人震惊的问题,我的任务的输出变量在后续任务中不可用。

描述

作为任务作者,您可以预定义一些输出变量作为任务清单的一部分。您还可以从代码(或脚本,如果是 powershell 任务)中设置所谓的“临时”输出变量

方法如下:

SDK.setVariable(outputVarName, varValue, true, true);

这里是我使用它的真实地方,但这是方法参数应该做的事情:

API ref

根据SDK的文档,使用此方法应该为我提供一些输出:

enter image description here

虽然文档示例使用脚本方法,但这与使用 SDK 的

setVariable()
方法相同。

问题

好的,现在开始解决问题。我希望如果我在扩展程序中运行此代码:

SDK.setVariable('MY_COOL_OUTPUT', 'hello world', true, true);

任务名称是:

enter image description here

我希望使用输出变量

task-name.output-var-name
语法在后续任务中提供以下内容(如本文档部分中所述)。

$myValue = $(MY_TASK_NAME.MY_COOL_OUTPUT);
但是,我收到以下错误:

MY_TASK_NAME.MY_COOL_OUTPUT : The term 'MY_TASK_NAME.MY_COOL_OUTPUT' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
我知道使用任务设置中输入的名称是有效的,因为我在之前的仅脚本步骤中执行了此操作:

enter image description here

进一步调查

我尝试了几种不同的方法,但没有成功。就好像我的任务名称写错了,但我尝试了很多不同的拼写,但它们从来不匹配。

您之前是否开发过使用临时输出的扩展?如果是,后续任务如何引用该变量?

谢谢!

azure-devops tfs azure-devops-extensions
1个回答
0
投票
我已经查看了扩展任务演示。

问题的原因是您在代码中设置了输出变量,但没有为任务设置输出变量字段。

目前您的扩展的输出变量字段尚未设置。

例如:

enter image description here

这意味着扩展任务没有输出变量。

要解决这个问题,您需要在

task.json文件中添加outputVariables

字段来连接扩展代码中设置的变量(MY_COOL_OUTPUT)。

这是一个例子:

{ ..... "outputVariables": [ { "name": "MY_COOL_OUTPUT", "description": "Task Output Variable" } ], "execution": { "Node16": { "target": "src/index.js" } } }
在这种情况下,当您安装扩展时,您将在任务中看到输出变量。

例如:

enter image description here

另一方面,当您设置变量名称时,您需要定义任务的

Name 字段,而不是 显示名称

例如:

- task: akeylessExtensionAzdo@0 displayName: 'Akeyless Secrets' name: test inputs: accessid: xxx
在经典管道中,您可以在

输出变量字段中定义参考名称

© www.soinside.com 2019 - 2024. All rights reserved.