Azure devops 如何在Azure DevOps服务中传递/存储可从单元测试访问的机密

Azure devops 如何在Azure DevOps服务中传递/存储可从单元测试访问的机密,azure-devops,azure-pipelines,vstest,Azure Devops,Azure Pipelines,Vstest,我需要在单元测试执行中使用从环境变量检索的秘密密码 测试由版本2中的Visual Studio测试任务执行* _networkCredential = new NetworkCredential(Environment.GetEnvironmentVariable("DomainAccountUsername"), Environment.GetEnvironmentVariable("DomainAccountPassword")); 若我直接从Powershell设置DomainAccou

我需要在单元测试执行中使用从环境变量检索的秘密密码

测试由版本2中的Visual Studio测试任务执行*

_networkCredential = new NetworkCredential(Environment.GetEnvironmentVariable("DomainAccountUsername"), Environment.GetEnvironmentVariable("DomainAccountPassword"));
若我直接从Powershell设置DomainAccountPassword,一切正常,测试成功结束,但我不想向团队中的其他用户显示密码

Write-Host "##vso[task.setvariable variable=DomainAccountPassword;]MyExamplePassword"
传递库组中定义的机密无效,导致身份验证错误

Write-Host "##vso[task.setvariable variable=DomainAccountPassword;]$(secretPassword)"
如何将机密传递给VSTS任务,使其能够在外部API中进行身份验证

谢谢大家!

依照 秘密变量在静止状态下使用2048位RSA密钥加密。代理上有用于任务和脚本的机密,因此要小心谁有权更改您的管道

与普通变量不同,它们不会自动解密为脚本的环境变量。不过,您可以显式地将它们映射到中

要将密码传递给脚本,请使用脚本任务输入变量的环境部分

在脚本中使用秘密 将变量设置为secret:

显式地将变量传递给脚本

并在脚本中使用名为$env:topshelfPassword的新env变量

如果您的管道是YAML而不是在经典编辑器中 您不应该在YAML文件中设置秘密变量。相反,您应该使用web界面在管道编辑器中设置它们。这些变量的作用域是设置它们的管道

下面的示例演示如何将web界面中名为mySecret set的秘密变量传递给脚本

亚马尔

步骤: -powershell:| 使用输入宏: 写一个有效的主机:$mySecret 直接使用env变量: 写入主机:此操作无效:$env:MYSECRET 使用映射的环境变量: 写主机:推荐:$env:MY_MAPPED_env_VAR 环境: 我的环境变量:$mySecret 注意这个变量是如何在web ui中声明为mySecret的,对于一个典型的非秘密变量$env:mySecret不是b/c它是一个秘密。然而,在YAML中起作用但在经典体验中不起作用的是输入宏语法$mySecret的使用,我相信我是正确的。

秘密变量在静止状态下使用2048位RSA密钥加密。代理上有用于任务和脚本的机密,因此要小心谁有权更改您的管道

与普通变量不同,它们不会自动解密为脚本的环境变量。不过,您可以显式地将它们映射到中

要将密码传递给脚本,请使用脚本任务输入变量的环境部分

在脚本中使用秘密 将变量设置为secret:

显式地将变量传递给脚本

并在脚本中使用名为$env:topshelfPassword的新env变量

如果您的管道是YAML而不是在经典编辑器中 您不应该在YAML文件中设置秘密变量。相反,您应该使用web界面在管道编辑器中设置它们。这些变量的作用域是设置它们的管道

下面的示例演示如何将web界面中名为mySecret set的秘密变量传递给脚本

亚马尔

步骤: -powershell:| 使用输入宏: 写一个有效的主机:$mySecret 直接使用env变量: 写入主机:此操作无效:$env:MYSECRET 使用映射的环境变量: 写主机:推荐:$env:MY_MAPPED_env_VAR 环境: 我的环境变量:$mySecret
注意这个变量是如何在web ui中声明为mySecret的,对于一个典型的非秘密变量$env:mySecret不是b/c它是一个秘密。然而,在YAML中起作用但在经典体验中不起作用的是我相信我是正确的使用输入宏语法$mySecret。

Visual Studio测试任务似乎无法在运行时将secret作为环境变量获取,但它可以从TestContext接受secret set作为参数

_networkCredential = new NetworkCredential(Environment.GetEnvironmentVariable("DomainAccountUsername"), TestContext.Parameters["DomainAccountPassword"]);
我已将.runsettings文件添加到测试项目中

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <TestRunParameters>
    <Parameter name="DomainAccountPassword" value="" />
  </TestRunParameters>
</RunSettings>
在VisualStudio测试任务选项中,我设置了设置文件的路径,并用我的密码覆盖了DomainAccountPassword参数


VisualStudio测试任务似乎无法在运行时将secret作为环境变量获取,但它可以从TestContext接受secret集作为参数

_networkCredential = new NetworkCredential(Environment.GetEnvironmentVariable("DomainAccountUsername"), TestContext.Parameters["DomainAccountPassword"]);
我已将.runsettings文件添加到测试项目中

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <TestRunParameters>
    <Parameter name="DomainAccountPassword" value="" />
  </TestRunParameters>
</RunSettings>
在VisualStudio测试任务选项中,我设置了设置文件的路径,并用我的密码覆盖了DomainAccountPassword参数


当你说Library Group时,你的意思是变量已经在Devops中的Library>variable groups下设置好了吗?确切地说,这个变量组链接到了我的发布管道。我也尝试过在发布管道中使用为一个阶段定义的发布变量。当你说Library Group时,你的意思是该变量已经在Devops中的Library>Vari下设置好了吗
可设置组?确切地说,此变量组链接到我的发布管道。我还尝试使用为发布管道中的一个阶段定义的发布变量。我的屏幕截图中没有包含。topshelfPassword由作用域变量dev.topshelfPassword和prod.topshelfPassword使用,因为这是在发布管道中,但我认为这个想法应该很容易理解。我想问题在于Visual Studio测试任务,例如,在Cake任务中,我可以将secret作为环境变量步骤传递:-task:Cake-build.Cake.Cake-build-task。Cake@0displayName:“Deploy”输入:脚本:Deploy.cake参数:'-Pass=$SecretPass'在发布管道任务中Studio Test没有属性env或参数只有属性otherConsoleOptions允许传递下面提到的参数我是错的还是对的?我的屏幕截图中没有包含。topshelfPassword由作用域变量dev.topshelfPassword和prod.topshelfPassword使用,因为这是在发布管道中,但我认为这个想法应该很容易理解。我想问题在于Visual Studio测试任务,例如,在Cake任务中,我可以将secret作为环境变量步骤传递:-task:Cake-build.Cake.Cake-build-task。Cake@0displayName:“Deploy”输入:脚本:Deploy.cake参数:'-Pass=$SecretPass'在发布管道任务中Studio Test没有属性env或参数只有属性otherConsoleOptions允许传递下面提到的参数我是错的还是对的?