TFS 2017 - 带有powershell的[ProjectName] .setParameters.xml

时间:2017-06-02 14:05:30

标签: powershell token release webdeploy tfs2017

我在我的构建中创建了一个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>

我不知道为什么会这样。有什么想法?

1 个答案:

答案 0 :(得分:1)

我认为你想从TFS版本定义环境中获取密码。

您无法使用

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

有一种方法,但这只适用于TFS VNext构建或发布扩展的上下文。

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

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

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

param(
   [string]$paramsFilePath,
   [string]$password 
)
相关问题