在多个发布任务中设置和使用环境变量

时间:2019-01-08 15:04:03

标签: powershell azure-devops automated-tests access-token azure-devops-rest-api

问题

如何将值从发布管道传递到测试程序集和控制台应用程序(.exe)?在这种情况下,我需要传递测试程序集和控制台应用程序都使用的个人访问令牌(PAT),如下所示:

bash ec2.sh

我一直在尝试在一个特定任务中设置环境变量,但是在其他任务中却无法使用它。

详细信息

我已经配置了一个发布管道,该管道运行一些集成测试并运行一个执行控制台应用程序的powershell脚本:

Release pipeline tasks

集成测试和控制台应用程序均使用个人访问令牌(PAT)访问Azure DevOps REST API。我正在从名为string token = Environment.GetEnvironmentVariable("appSettings_personalAccessToken"); 的环境变量中读取此值,该变量应在发布管道中设置。

Set token release task

我正在尝试在第一个任务(Powershell任务-内联脚本)中设置PAT,但是在其他任务中它似乎被忽略了,我在做什么错了?

我试图像这样在powershell任务中设置PAT:

appSettings_personalAccessToken

或者这样:

Write-Host ##vso[task.setvariable variable=appSettings_personalAccessToken;isSecret=false;isOutput=true;]$personalAccessToken

但是该值似乎在其他任务中被忽略。我在这里想念什么?

编辑1

即使试图在powershell任务中设置硬编码的PAT也不起作用:

[Environment]::SetEnvironmentVariable('appSettings_personalAccessToken', $personalAccessToken, 'User')
[Environment]::SetEnvironmentVariable('appSettings_personalAccessToken', $personalAccessToken, 'Machine')

4 个答案:

答案 0 :(得分:2)

您无需为此使用PAT。使用$(System.AccessToken)。您可以授予构建或释放对系统提供的OAuth令牌的访问权限,然后在需要auth令牌的实例中进行引用。

请注意,您需要grant access to the OAuth token,否则将无法正常工作。

答案 1 :(得分:0)

使用此命令时:

Write-Host ##vso[task.setvariable variable=appSettings_personalAccessToken;isSecret=false;isOutput=true;]$personalAccessToken

您需要在数据周围加上引号:

Write-Host "##vso[task.setvariable variable=appSettings_personalAccessToken;isSecret=false;isOutput=true;]$personalAccessToken"

否则,PowerShell将看到#并注释其余的行

答案 2 :(得分:0)

这里的问题是Windows不会在创建/更改或删除时自动刷新环境变量。 仅在重新启动explorer.exe进程后,或者在
中手动设置变量后,才会发生这种情况 我的电脑|属性|进阶|环境变量

Explorer然后向所有窗口广播WM_SETTINGCHANGE消息,以通知他们所做的更改。
但是,即使手动执行此操作,已经运行的进程也可能无法获取更改,除非它们处理设置更改消息。

如果重新启动资源管理器不是问题,则可以尝试:

[Environment]::SetEnvironmentVariable('appSettings_personalAccessToken', $personalAccessToken, 'User')
[Environment]::SetEnvironmentVariable('appSettings_personalAccessToken', $personalAccessToken, 'Machine')
Stop-Process -ProcessName explorer

explorer.exe进程应自动重新启动。这由注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon AutoRestartShell值控制。

希望有帮助。

答案 3 :(得分:0)

我将在此处发布我的解决方案,希望它对可能有相同问题的其他人很有用。感谢@Matt和@Theo为我指出正确的方向。

我对发布变量的工作方式有错误的理解。我以为这些仅在任务级别可用,而不对从发布管道执行的任何应用程序或测试程序集可用-这就是为什么我试图使用Powershell设置它们的原因。

因此解决方案非常简单-我删除了尝试设置环境变量的powershell任务,并按如下所示设置变量:

Release definition variables