如何在VSTS中将秘密变量添加为任务环境变量

ajb*_*ven 7 azure-devops azure-pipelines-build-task

本文档指出秘密变量是

未解密为环境变量。因此,默认情况下,您的构建步骤所运行的脚本和程序不会获得访问权限。

我的构建任务之一要求设置一个环境变量,该环境变量存储在一个秘密变量中。这是否意味着在VSTS中使用秘密变量无法做到这一点?如果没有,我该怎么做?

为了获得进一步的背景知识,我正在尝试使用electronic-builder对我的电子应用程序进行编码签名。它要求设置两个环境变量:CSC_LINKCSC_KEY_PASSWORD。其中之一是代码签名证书的密码,因此需要确保安全。

Ric*_* II 7

设置环境变量

使用命令行任务,如下所示:

VSTS Build - 将秘密变量复制到环境变量

target_environment_variable现在包含secret_variable的值。

核实

添加将所有环境变量写入磁盘文件的后续命令行任务,如下所示:(注意:在参数文本框中,写入您和构建代理都可以访问的文件夹):

VSTS Build - 将环境变量写入磁盘


将构建定义排队,然后查看包含环境变量的文件:

VSTS Build - 查看 env vars 的文件

  • 如果环境变量名称与秘密变量名称相同,这应该起作用吗?因此,在上面的示例中,如果您将“TARGET_ENVIRONMENT_VARIABLE”更改为“secret_variable”,它对您有用吗?我发现,如果我尝试设置一个与秘密变量同名的环境变量,则该变量实际上并未设置。 (2认同)
  • 我深入研究了 KeyVault 任务源代码并确认了此行为。源代码中的确切引用说“一旦是秘密,永远是秘密”,并且它特别不允许将秘密管道变量设置为环境变量。我刚刚编写了几行 Powershell 来实现我所需要的,但很高兴知道根本原因。 (2认同)

Lar*_*lke 5

当使用 YAML 语法时,这也可以实现:

steps:
- script: |
    echo %MYSECRET%
  env:
    MySecret: $(Secret_Variable)
Run Code Online (Sandbox Code Playgroud)


ajb*_*ven 3

您可以在构建定义的“变量”页面中提供要传递给任务的变量:

在此输入图像描述

然后它们可以作为输入传递到任务中,如下所示:

在此输入图像描述

  • 这并没有回答如何将秘密变量的值放入 *Environment* 变量的原始问题。*这个*答案实际上只是描述了在 VSTS 任务参数中引用*任何*变量(秘密或秘密)的标准方法。 (11认同)