是否可以在 Powershell 脚本中的变量内使用 Azure Pipelines 变量?
SCENARIO
-
Azure Pipelines 变量组中设置了两个变量 -DeploymentCredentials
a. DeployUATApiPassword = "123456"
b. DeployPRODApiPassword = "789654"
另一个变量在管道的变量部分设置为DeploymentEnvironment
在运行时,该值DeploymentEnvironment
变量设置为UAT
or PROD
-
根据环境,我想获取存储为变量的密码,在变量组中定义。在运行时,它应该像...
# setting the value of the variable to UAT
Write-Host "##vso[task.setvariable variable=DeploymentEnvironment]UAT"
-
Now DevelopmentEnvironment
变量有值UAT
,在另一个步骤中,我想获取UAT部署环境的密码,该密码只有在运行时才知道。
# I want to get the Password
# The following works! but not useful for me, UAT is hard-coded!!
$deployPwd = $(DeployUATApiPassword) # works! but not useful for me, UAT is hard-coded!!
# I want to get the Password
# the following doesn't work, I only know the environment at runtime
# Replaces the inner variable to `DeployUATApiPassword`
# Raises an error, DeployUATApiPassword : The term 'DeployUATApiPassword' is not recognized as the name of a cmdlet...
$deployPwd = $(Deploy$(DeploymentEnvironment)ApiPassword)
# All the following didn't work either, but no error...
Write-Host $('Deploy$(DeploymentEnvironment)ApiPassword') # Output: DeployUATApiPassword
Write-Host $($("Deploy$(DeploymentEnvironment)ApiPassword")) # Output: DeployUATApiPassword
Write-Host { 'Deploy$(DeploymentEnvironment)ApiPassword' } # Output: 'DeployUATApiPassword'
Write-Host { Deploy$(DeploymentEnvironment)ApiPassword } # Output: DeployUATApiPassword
Write-Host { $(Deploy$(DeploymentEnvironment)ApiPassword) } # Output: $(DeployUATApiPassword)
同样,我尝试通过多种方式获取密码,但没有任何效果。
例如,其中一种方法是创建另一个变量DeployApiPassword
我确实将变量的值设置为Deploy$(DeploymentEnvironment)ApiPassword
。这也没有运气......
$deployPwd = $(DeployApiPassword) # Output: DeployUATApiPassword
期望的输出
我想从变量组中设置的变量之一获取密码。密码变量名称包含部署环境。部署环境仅在运行时设置。
# I know something is wrong with the following, but that's how I want to run.
$deployPwd = $(Deploy$(DeploymentEnvironment)ApiPassword)
Write-Host $deployPwd # output: *** (of course, the pwd is hidden, but at least it fetches)
Azure Pipelines 变量组中设置的变量将用作 PowerShell 任务中的环境变量。因此,基本上,您需要获取以下值:
$environment = $env:DeploymentEnvironment
$deployPwd = $env:DeployUATApiPassword
同时,如果您想根据环境动态获取密码,可以尝试以下操作:
$environment= $env:DeploymentEnvironment
Write-Host "Deployment Environment is " $environment
$realName = $("Deploy${environment}ApiPassword")
$pwd = [Environment]::GetEnvironmentVariable($realName)
#I used UAT password, check it here
Write-Host $pwd.Equals("123456")
Output:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)