我开发了一个 Azure DevOps (AzDO) 任务,它运行良好。 https://github.com/LanceMcCarthy/akeyless-extension-azdo
但是,还有最后一个令人震惊的问题,我的任务的输出变量在后续任务中不可用。
作为任务作者,您可以预定义一些输出变量作为任务清单的一部分。您还可以从代码(或脚本,如果是 powershell 任务)中设置所谓的“临时”输出变量
方法如下:
SDK.setVariable(outputVarName, varValue, true, true);
这里是我使用它的真实地方,但这是方法参数应该做的事情:
根据SDK的文档,使用此方法应该为我提供一些输出:
虽然文档示例使用脚本方法,但这与使用 SDK 的
方法相同。setVariable()
好的,现在开始解决问题。我希望如果我在扩展程序中运行此代码:
SDK.setVariable('MY_COOL_OUTPUT', 'hello world', true, true);
任务名称是:
我希望使用输出变量
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.
我知道使用任务设置中输入的名称是有效的,因为我在之前的仅脚本步骤中执行了此操作:进一步调查
您之前是否开发过使用临时输出的扩展?如果是,后续任务如何引用该变量?
谢谢!
问题的原因是您在代码中设置了输出变量,但没有为任务设置输出变量字段。
目前您的扩展的输出变量字段尚未设置。
例如:
这意味着扩展任务没有输出变量。
要解决这个问题,您需要在
task.json
文件中添加outputVariables
字段来连接扩展代码中设置的变量(MY_COOL_OUTPUT)。这是一个例子:
{
.....
"outputVariables": [
{
"name": "MY_COOL_OUTPUT",
"description": "Task Output Variable"
}
],
"execution": {
"Node16": {
"target": "src/index.js"
}
}
}
在这种情况下,当您安装扩展时,您将在任务中看到输出变量。例如:
另一方面,当您设置变量名称时,您需要定义任务的
Name 字段,而不是 显示名称。
例如:
- task: akeylessExtensionAzdo@0
displayName: 'Akeyless Secrets'
name: test
inputs:
accessid: xxx
在经典管道中,您可以在输出变量字段中定义参考名称。