2012-07-24 127 views
38

我的TeamCity v7.0構建項目之一依賴於使用當前開發分支和主分支之間的差異來確定需要運行的內容。我已經寫了使用類似於一個小的腳本:在TeamCity構建步驟中使用git命令

git diff origin/master..origin/QA --name-only --diff-filter=AM | DoSomethingWithThoseFiles 

不幸的是,生成日誌表明git diff不工作。當我進入該項目的buildAgent/work目錄時,發現沒有.git文件夾,因此無法執行所需的git操作。

我已將teamcity.git.use.local.mirrors=true置於文件中,如TW-15873所述,但這似乎沒有任何幫助。

有什麼我可以做的,以獲得我的構建步驟腳本中的兩個分支之間更改的文件列表?

+1

這是否有解決方案?我也有使用TeamCity 8.1的困難。我正在使用VCS結帳模式「自動在代理上」,但這似乎沒有幫助。 .git目錄仍然丟失。 – user24601 2015-12-23 18:30:54

回答

45

嘗試將VCS簽出模式更改爲「總是在代理上籤出文件」,如文檔here所述。這應該使構建腳本可以訪問.git文件夾。

+3

這讓我有一部分的方式,但做起始/主和當前分支之間的差異不起作用。相反,它似乎只能識別本地或遠程的SINGLE分支!我認爲TC正在做一些有趣的事 - 克隆一個克隆或者一些不尋常的東西。 「git fetch」會拋出一個錯誤,即使當前repo在buildAgent/work/blah中,buildAgent/system/git/git-14CE2659.git似乎不是git存儲庫。 – 2012-08-20 19:39:19

+1

謝謝!這回答了我有一個問題:http://stackoverflow.com/questions/17555931/how-do-i-get-teamcity-to-create-the-git-directory-when-cloning-a-repo-for-build – 2013-07-09 19:39:32

+0

不幸的是,如果你需要ssh認證訪問,例如爲了將更改推送到遠程git倉庫,它不起作用,因爲TeamCity在提取後擦除ssh項。 https://confluence.jetbrains.com/display/TCD9/SSH+Keys+Management – 2015-11-24 15:05:23

7

@Mike Two的回答是正確的,需要配置VCS根目錄以在代理上自動使用簽出模式 - 不在服務器上。技術委員會沒有提到這個必需的設置默認隱藏爲「高級」。所以這裏是一個尋找什麼的圖片。

Advanced Settings

FYI,來自MSBuild的我的具體VS2013解步驟誤差,如下。我正在使用最新的TeamCity Enterprise 9.0 EAP(版本31963)。 [PreBuildEvent] Exec [14:21:55][Exec] git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\MYPROJECT\bin\Debug\version.txt" [14:21:55][Exec] fatal: Not a git repository (or any of the parent directories): .git [14:21:55][Exec] C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1131, 5): error MSB3073: The command "git rev-parse --short=9 HEAD > "C:\TeamCity\buildAgent\work\e5e910561e800525\Higgens\bin\Debug\version.txt"" exited with code 128. [14:21:55]

// edit;我不知道如何將其添加到評論中。

相關問題