TFS 2017 - [ProjectName].setParameters.xml with powershell



i在构建中创建一个zip软件包,然后将其部署到奇异的计算机上,我在参数中添加几个参数。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"

它将浏览参数文件,并用enviromental变量替换参数令牌。

在我的setParamaters.xml文件中,网站名称仅更改

<?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>

我不知道为什么会发生这种情况。有任何想法吗?

我想您想从TFS发布定义环境中获取密码。

您可以使用

访问隐藏字段
$vars = Get-ChildItem -path env:secretVariable

有一种方法,但这仅在tfs vnext构建或发布扩展的上下文中起作用。

在您的情况下,访问的唯一可能性是将变量设置为脚本参数:

-paramsFilePath $(paramsFilePath) -password $(secretVariable)

在您的脚本中添加参数,例如

param(
   [string]$paramsFilePath,
   [string]$password 
)

最新更新