2017-08-08 54 views
1

我有一個ASP .Net MVC應用程序,具有4種不同的發佈配置文件:dev,test,demo和prod。如何管理TFS中的很多類似配置

這些發佈配置文件是使用相同的兩個步驟構建的:NuGet恢復,然後是MSBuild。然後,它們被部署到許多不同的服務器上:幾臺dev服務器(每個團隊一臺服務器),一臺測試服務器,一臺演示服務器和多臺生產服務器。

msbuild /p:Configuration="$(Configuration)" 
     /p:PlatformTarget="any cpu" 
     /p:DeployOnBuild="True" 
     /p:DeployTarget="MsDeployPublish" 
     /p:MSDeployServiceURL="$(MSDeployServiceURL)" 
     /p:DeployIISAppPath="portal" 
     /p:CreatePackageOnPublish="False" 
     /p:MsDeployPublishMethod="WMSVC" 
     /p:AllowUntrustedCertificate="True" 
     /p:UserName="Deploy_User_For_TFS" 
     /p:Password="[email protected]" 
     /p:AutoParameterizationWebConfigConnectionStrings=False 
     /p:ExcludeFilesFromDeployment="Cache" 

目前,我有4個TFS構建配置(一個爲每個發佈配置文件),並在那裏我有所有MSDeployServiceURL參數的可能值的文件。

有兩個問題,這種方法:

  1. 當我們不得不增加一個新的參數AutoParameterizationWebConfigConnectionStrings我們不得不改變它在4處而不是一個。
  2. 我們必須有一個共享文件作爲參數的來源。理解哪些價值應該被複制並且人們經常犯錯誤並不容易。

所以我有兩個問題:

  1. 有沒有辦法有一個通用模板,在那裏我可以只指定我的參數配置和可能的MSDeployServiceURL的名單,並擁有一切保持原樣?有這樣的模板應該解決問題#1。
  2. 有沒有辦法定義下拉式變量,其中值不能由用戶鍵入,但應該從預定義的值列表中選擇?
+0

您是否通過Jacob的回答解決了這個問題?它解決了你的問題,你可以[接受它作爲一個答案](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),這可以有益於其他社區會員閱讀此主題。 –

+0

我們嘗試過了,它比我們之前所做的更不方便:舊的配置很難理解和維護,但**易於使用**。並且提出的配置「看起來不錯」,但是在實踐中,爲了發佈它而構建一些東西很麻煩。 – DarkWalker

回答

1

有什麼辦法有一個通用模板,在那裏我可以指定 只有我的參數配置和可能的 MSDeployServiceURLs列表,並擁有一切保持不變?有 這樣的模板應該解決問題#1。

您可以簡化以使發佈配置創建模板發佈配置文件。然後使用TFS's release management,您可以使用適當的值更新發布配置文件。根據您的描述,似乎您正在試圖將編譯和發佈結合起來。

例如,在TFS中,您可以構建一個版本(例如,MyApp-Release),以在發行版配置中構建代碼。作爲該過程的一部分,它將傳遞給部署URL等佔位符。例如,/p:MSDeployServiceURL="$(MSDeployServiceURL)"將是/p:MSDeployServiceURL="__MSDeployServiceURL__"

在TFS版本中,您將有一個步驟,在發佈配置文件中替換令牌(如果需要,可以使用Colin's ALM Corner Custom Build Tasks)。然後替換令牌任務將使用來自具有相同名稱的發佈環境變量(減去下劃線)的值更新__MSDeployServiceURL__。因此,您的版本將具有dev,test,demoprod環境,並且對於每個環境,都會有一個名爲MSDeployServerURL的變量,每個變量具有不同的值和替換令牌步驟。