2012-07-24 14 views
38

Uno dei miei progetti di build di TeamCity v7.0 si basa sull'utilizzo di un diff tra il ramo di sviluppo corrente e il ramo master per determinare ciò che deve essere eseguito. Ho scritto un piccolo script che utilizza qualcosa come:Utilizzo di comandi git in un passaggio di TeamCity Build

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

Purtroppo, il log di compilazione indica che git diff non funziona. Quando vado nella directory buildAgent/work per questo progetto, vedo che non esiste una cartella .git, quindi non può eseguire le operazioni git richieste.

Ho inserito teamcity.git.use.local.mirrors=true nel file buildAgent.properties come indicato allo TW-15873, ma questo non sembra essere di aiuto in alcun modo.

C'è qualcosa che posso fare per ottenere l'elenco dei file modificati tra due rami in uno script per il mio passo di costruzione?

+1

C'è stata una soluzione per questo? Sto riscontrando questa difficoltà anche con TeamCity 8.1. Sto utilizzando la modalità di verifica VCS "Automaticamente su Agent" ma non sembra essere di aiuto. La directory .git è ancora mancante. – user24601

risposta

45

Provare a modificare la modalità di verifica VCS su "Esegui sempre il checkout dei file sull'agente" come documentato here. Questo dovrebbe dare l'accesso allo script di build alla cartella .git.

+3

Questo mi ha fatto di parte, ma fare il diff tra origine/Master e il ramo corrente non funziona. Invece, sembra che riconosca solo un ramo SINGLE locale o remoto! Penso che TC stia facendo qualcosa di strano ... clonando un clone o qualcosa di insolito. "git fetch" genera un errore che buildAgent/system/git/git-14CE2659.git non sembra essere un repository git, anche se il repository corrente è in buildAgent/work/blah. –

+1

Grazie! Questo ha risposto a una domanda che ho avuto: http://stackoverflow.com/questions/17555931/how-do-i-get-teamcity-to-create-the-git-directory-when-cloning-a-repo-for-build –

+0

Sfortunatamente, sembra che se hai bisogno di accesso autenticato con ssh, ad es. per spingere le modifiche al repository git remoto, non funziona poiché TeamCity cancella le chiavi ssh dopo il recupero. https://confluence.jetbrains.com/display/TCD9/SSH+Keys+Gestione –

7

@Mike La risposta di Two è corretta, è necessario configurare la radice VCS in modo da utilizzare la modalità Checkout automaticamente su Agent -non sul server. I documenti del TC non menzionano che questa impostazione richiesta è nascosta di default come 'avanzata'. Quindi ecco una foto di cosa cercare.

Advanced Settings

Cordiali saluti, Il mio errore specifico passo VS2013 soluzione è stata da MSBuild, come qui di seguito. Sto usando l'ultimo EAP TeamCity Enterprise 9.0 (build 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]

// modifica; Non sapevo come aggiungere questo a un commento.

Problemi correlati