2017-09-25 86 views
0

寻找在发布时替换配置标记的步骤。我尝试了几个令牌替换任务/扩展,但不能让任何人工作。我是VSTS的新手,因此他们可能会期望某种程度的专业知识,或者只是知道在步骤x & y之间做些什么。我试过VSTS - web.config.token的最佳做法替换

IIS Web应用程序部署(外的开箱) 只适用于某些部分,我有来标记实际的web.config(想保持的web.config非标记化对于本地调试)

Azure的应用服务部署()

符号化道达尔ALM外的开箱

更换托克由科林的ALM角

NS纪尧姆Rouchon

和最后3是行不通的更换令牌。任何人都有这些经验或知道步行?

+0

更新 - 我最终在解决方案中包含所有环境特定的配置文件,然后创建另一个“发布构建工件”任务,将其复制到服务器。然后,我添加了一个PowerShell发布任务,将特定于环境的文件复制到实际文件中,例如“web.config.pre-production”复制到web.config。 – Mike

回答

0

最后3项工作是通过从您的版本定义的变量部分注入值,坦率地说我只是不喜欢期间 - 我更喜欢将应用程序配置作为代码(密码除外)源代码控制的配置文件。然后我通过PowerShell进行令牌替换,作为我的应用程序部署脚本的一部分。

这是我编写并常用来执行令牌替换的函数。如果将它放入PowerShell模块中,它可以很好地工作,但作为独立功能很好。

function Invoke-ReplaceTokens { 
param(
[string]$FileSpec, 
[string]$FilePath, 
[HashTable]$Values) 

    try { 
     $files = gci -Path $FilePath -Filter $FileSpec -Recurse 
     Write-Output "Found files:" 

     Write-Output ($files | select-object -expandproperty FullName) 
     $files | % { 
      $contents = Get-Content $_.FullName -Raw 
      $changedContents = $false 
      foreach ($key in $Values.Keys) { 
       if ($contents.Contains($key)) { 
        Write-Output "$($_.FullName) contains `"$key`". Replacing it with `"$($Values[$key])`"" 
        $contents = $contents.Replace($key, $Values[$key]) 
        $changedContents = $true 
       } 
      } 
      if ($changedContents) { 
       set-content -Path $_.FullName -Value $contents 
      } 
     } 
    } 
    catch { 
     Write-Output $_ 
     throw $_ 
    } 
} 

使用的部署脚本:

Invoke-ReplaceTokens -FileSpec '*.config' -FilePath 'C:\Location\Of\My\Config\File' -Values @{ '__Token__' = 'ActualValue' } 

而且,这个问题你问这是题外话堆栈溢出(异地资源的建议是题外话),所以我回答您最初的问题的自然演变:“部署期间配置文件管理的好方法是什么?”