2010-06-29 69 views
0

我想集成測試運行之前(而不是在開發機)如何僅在構建機器上執行MSBuild複製操作?

  • 後進行構建和
  • 執行build機器上的一些複製動作。

我該怎麼做?

也許,我應該將問題分解爲子問題並給出一些例子。

問題1:我需要做什麼以便MSBuild腳本檢測到它正在構建機器上執行並因此執行復制操作?我是否適應* .csproj文件?我在Build Definition文件中做些什麼?構建服務器是我們TFS 2010後端的一部分。

問題2:我需要使用什麼變量來引用構建機器上的構建文件夾?絕對路徑是

C:\Builds\1\ProjectX\Continous Integration\ 

我需要將版本控制下的一些文件複製到Sources文件夾中的Binaries文件夾中。

C:\Builds\1\ProjectX\Continous Integration\Binaries 
C:\Builds\1\ProjectX\Continous Integration\Sources 
C:\Builds\1\ProjectX\Continous Integration\TestResults 

回答

1

無論你自動化構建與應該能夠傳遞一個屬性到MSBuild。在命令行,你做這樣的事情:

msbuild my.proj /p:RunningOnBuildMachine=true 

在你的腳本,那麼你可以使用基於$(RunningOnBuildMachine) == 'true'條件觸發臨時步驟。或者,已經有一個內置變量$(BuildingInsideVisualStudio)告訴MSBuild它是否從VS內部被調用,這可能足以滿足您的需求。

至於你的輸出目錄在哪裏,這有點棘手。什麼決定了這個位置?它是CI服務器嗎?如果是這樣,你可以試着將輸出目錄作爲屬性傳遞給腳本。

+0

我不確定輸出目錄位置決定了什麼。我們有一個TFS 2010實例和一個構建服務器。我猜想輸出位置是在團隊資源管理器視圖> ProjectX>構建>「持續集成」>編輯構建定義>工作區>構建代理文件夾= $(SourceDir)中的某處定義的......我假設我可以使用$(SourceDir) MSBuild腳本。 – Lernkurve 2010-06-29 16:02:44

0

如果您使用的是使用Windows Workflow Foundation而不是使用MSBuild的升級模板的默認構建過程模板(DefaultTemplate.xaml),那麼您可以使用包含在開箱即可使用的CopyDirectory工作流活動編譯部分和工作流程的測試部分之間。

您在TFS 2010中使用哪個構建過程模板?

+0

偉大的提示,謝謝!是的,我們正在使用默認的構建過程模板DefaultTemplate.xaml。我會嘗試在正確的位置添加一個CopyDirectory工作流活動。 – Lernkurve 2010-06-30 06:30:08

+0

真棒 - 我現在是Team Build 2010中Windows Workflow Foundation的忠實粉絲。 – 2010-07-02 01:26:17

0

build文件夾:

你試過的MSBuild保留屬性MSBuildProjectDirectory

您可以像其他屬性一樣訪問它,例如, $(MSBuildProjectDirectory)\Binaries。還是你的意思是別的?

0

如果您對工作流程感到滿意,您可以操作現有的工作流程來執行Ed已經指定的工作流程。 如果您希望將其作爲構建過程的一部分,以便您可以準備一個最終可以使用msdeploy的包,那麼您可以將其放入msbuild腳本中。 1)假設你有一個web項目文件要建立,你可以創建msbuild腳本,其名稱與擴展名爲的wp.targets相同;它將在構建過程中被拾取,例如如果您的項目名爲mywebproject.csprj,則新腳本將稱爲mywebproject.wpp.targets。在那裏你可以讓你的目標在特定的目標構建之後運行。關於該物業,你有很多選擇。保羅的例子很好。我通常定義一個默認的空屬性,我使用構建參數進行覆蓋,或者修改工作流以覆蓋該屬性。在使用visual studio的常規構建中,我的參數將是空的,我可以將其用作我的一些目標的條件。

2)當我想將其他文件包含到msdeploy包中時,我使用了很多$(ProjectDir)和$(_ PackageTempDir)。 $(ProjectDir)也適用於你。它指向構建服務器上的項目文件所在的文件夾。

我希望幫助。

相關問題