如何将值从发布管道传递到测试程序集和控制台应用程序(.exe)?在这种情况下,我需要传递测试程序集和控制台应用程序都使用的个人访问令牌(PAT),如下所示:
bash ec2.sh
我一直在尝试在一个特定任务中设置环境变量,但是在其他任务中却无法使用它。
我已经配置了一个发布管道,该管道运行一些集成测试并运行一个执行控制台应用程序的powershell脚本:
集成测试和控制台应用程序均使用个人访问令牌(PAT)访问Azure DevOps REST API。我正在从名为string token = Environment.GetEnvironmentVariable("appSettings_personalAccessToken");
的环境变量中读取此值,该变量应在发布管道中设置。
我正在尝试在第一个任务(Powershell任务-内联脚本)中设置PAT,但是在其他任务中它似乎被忽略了,我在做什么错了?
我试图像这样在powershell任务中设置PAT:
appSettings_personalAccessToken
或者这样:
Write-Host ##vso[task.setvariable variable=appSettings_personalAccessToken;isSecret=false;isOutput=true;]$personalAccessToken
但是该值似乎在其他任务中被忽略。我在这里想念什么?
即使试图在powershell任务中设置硬编码的PAT也不起作用:
[Environment]::SetEnvironmentVariable('appSettings_personalAccessToken', $personalAccessToken, 'User')
[Environment]::SetEnvironmentVariable('appSettings_personalAccessToken', $personalAccessToken, 'Machine')
答案 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)