如何在 TFS Release 中使用日志记录命令设置秘密环境变量

How to set secret environment variable with logging commands in TFS Release

我正在将一个秘密发布任务变量传递给 PowerShell 脚本,并尝试使用 logging commands 将该值设置为 环境变量,这样我就可以在同一版本中的其他任务。我可以使用非秘密变量来执行此操作,但不能使用秘密变量。

所以,当 PAT 是一个非秘密变量时,以下是有效的(我可以使用 ls env: 看到它,也可以使用它连接到 tfs 实例作为个人访问令牌):

内联脚本参数:-token "$(PAT)"

Param(
   [string]$token
)
Write-Host "##vso[task.setvariable variable=API_TOKEN;]$token"

如果我在后续的 powershell 任务中使用它,我只能使用上面设置的环境变量 - 它在传递 PAT 的任务中不可用。

但当 PAT 是秘密变量时,以下内容似乎不起作用:

内联脚本参数:-token "$(PAT)"

Param(
   [string]$token
)
Write-Host "##vso[task.setvariable variable=API_TOKEN;issecret=true]$token"

(注意:我也尝试将 API_TOKEN 更改为 MYTOKEN 之类的其他内容,以防 API_TOKEN 被保留,但如果我这样做 [=12= 仍然根本看不到 MYTOKEN var ] 在后续的 PowerShell 任务中。)

如何将环境变量设置为从发布任务传递的秘密值,以供该任务或发布中的其他任务使用?换句话说,我何时或如何使用 issecret=true 访问由上述日志记录命令设置的环境变量? (我不确定我是否正确设置了它,因为我看不到它,但我假设我是因为非机密版本有效。)

不确定这是否重要,但我 在发布定义中勾选了 "Allow scripts to access OAuth token".

的方框

更新

还有更多信息here,但非常混乱。我不知道如何设置和访问秘密环境变量——我怀疑它们实际上不是环境变量,但在那种情况下,我根本不明白为什么需要日志记录命令,因为我们已经可以传递秘密变量到脚本。我能够通过将秘密变量从发布任务直接传递到 PowerShell 脚本,然后从那里传递到其他脚本来解决,而不是尝试 set/access 作为环境变量的值。

实际上日志命令也适用于秘密变量(您尝试过的应该有效)。正如日志命令用法所述:

When issecret is set to true, the value of the variable will be saved as secret and masked out from log. Secret variables are not passed into tasks as environment variables and must be passed as inputs.

您可以使用脚本 echo $(API_TOKEN) 而不是 ls env:(因为秘密变量不会通过命令 ls env: 显示),那么您将得到 ********

并且为了在您的后续发布任务中使用秘密变量 $(API_TOKEN),该值应作为输入传递(如用法所述)。

无法使用上述日志记录命令设置秘密 环境 变量。