我在我的构建中创建了一个zip包然后我将它部署到一个不同的机器我在我的parameters.xml中调用了几个参数
<?xml version="1.0" encoding="utf-8"?>
<parameters>
<parameter name="WebSiteUserName" description="Please enter the username" defaultvalue="__WebSiteUserName__" tags="">
<parameterentry kind="XmlFile" scope="\\web.config$" match="/configuration/connectionStrings/add[@key='WebSiteUserName']/@value">
</parameterentry>
</parameter>
<parameter name="WebSiteUserPassword" description="Please enter the password" defaultvalue="__UserPassword__" tags="">
<parameterentry kind="XmlFile" scope="\\web.config$" match="/configuration/connectionStrings/add[@key='WebSiteUserPassword']/@value">
</parameterentry>
</parameter>
<parameter name="WebSiteDomain" description="Domiain" defaultvalue="__Domain__" tags="">
<parameterentry kind="XmlFile" scope="\\web.config$" match="/configuration/appSettings/add[@key='WebSiteDomain']/@value">
</parameterentry>
</parameter>
</parameters>
</parameters>
然后我运行一个PowerShell脚本
param(
[string]$paramsFilePath
)
Write-Verbose -Verbose "Entering script Replace-SetParameters.ps1"
Write-Verbose -Verbose ("Path to SetParametersFile: {0}" -f $paramsFilePath)
# get the environment variables
$vars = Get-ChildItem -path env:*
# read in the setParameters file
$contents = Get-Content -Path $paramsFilePath
# perform a regex replacement
$newContents = "";
$contents | % {
$line = $_
if ($_ -match "__(\w+[\.\w+]*)__") {
$setting = Get-ChildItem -path env:* | ? { $_.Name -eq $Matches[1] }
while ($setting) {
Write-Verbose -Verbose ("Replacing key {0} with value from environment" -f $setting.Name)
$line = $_ -replace "__(\w+[\.\w+]*)__", $setting.Value
}
}
$newContents += $line + [Environment]::NewLine
}
Write-Verbose -Verbose "Overwriting SetParameters file with new values"
Set-Content $paramsFilePath -Value $newContents
Write-Verbose " Assigning Parameters"
Write-Verbose -Verbose "Exiting script Replace-SetParameters.ps1"
它将遍历参数文件并将参数标记替换为环境变量。
在我的setParamaters.xml文件中,WebSiteUsername只会被更改
<?xml version="1.0" encoding="utf-8"?>
<parameters>
<setParameter name="IIS Web Application Name" value="Default Web Site/SomeWebsite" />
<setParameter name="WebSiteUserName" value="username" />
<setParameter name="WebSiteUserPassword" value="__UserPassword__" />
<setParameter name="Web.config Connection String" value="SomeValueForConnection" />
</parameters>
我不知道为什么会这样。有什么想法?
答案 0 :(得分:1)
我认为你想从TFS版本定义环境中获取密码。
您无法使用
访问隐藏字段$vars = Get-ChildItem -path env:secretVariable
有一种方法,但这只适用于TFS VNext构建或发布扩展的上下文。
在您的情况下,访问的唯一可能性是将变量设置为脚本参数,如下所示:
-paramsFilePath $(paramsFilePath) -password $(secretVariable)
在您的脚本中添加参数,如
param(
[string]$paramsFilePath,
[string]$password
)