7

Il nostro ciclo di sviluppo/rilascio funziona così:Come posso convincere TeamCity a unire automaticamente un ramo di feature Git con il master e fallire la compilazione in caso di conflitti di unione?

  1. sviluppatore crea un ramo di caratteristica, implementa una funzione
  2. sviluppatore indica funzione è pronto per l'accettazione di prova (SVS)
  3. Tester distribuisce ramo di caratteristica e accetta (o respinge) caratteristica

caratteristiche accettati vengono poi fuse in ramo principale dal tester, e saranno quindi rilasciati nel corso del prossimo rel easy cycle (distribuiamo settimanalmente il tronco/codice principale).

Stiamo avendo frustrazioni con i conflitti di unione, perché quando il tester ha acquisito la funzione UAT e scoperto che non si fonderà in modo pulito, lo sviluppatore che ha lavorato in esso normalmente si è spostato su qualcos'altro.

Stiamo considerando una soluzione in base alla quale ogni ramo di funzionalità viene automaticamente unito, da TeamCity, al ramo master corrente e qualsiasi build risultante in un conflitto di unione viene considerata una build non riuscita: ciò ci darà una visibilità tempestiva sulle fusioni problematiche quindi possiamo risolverli prima.

TeamCity non sembra avere il supporto integrato per questo flusso di lavoro (ad esempio quando un push accade al ramo X, checkout master, unire il ramo X su di esso, creare, unit-test, creare il pacchetto). Qualcuno ha creato un flusso di lavoro simile usando TeamCity e Github - usando obiettivi personalizzati di msbuild, forse?

EDIT: Devo chiarire che stiamo usando Github ma attualmente non stiamo usando richieste di pull - suoni come questo è qualcosa che dovrei investigare. :)

+1

Grande domanda Dylan, sto cercando di risolvere lo stesso problema io stesso. Quando menzioni GitHub nell'ultima frase, intendi invece Git? Perché GitHub implementa già questa funzionalità. Ne approfitto già in progetti open source. –

risposta

2

Se stai usando Github e Pull Richieste quindi controllare post sul blog di Hadi Hariri su come ottenere la richiesta di pull dopo che è stata fusa con il maestro:

http://hadihariri.com/2013/02/06/automatically-building-pull-requests-from-github-with-teamcity/

Github fa un automatico merge per ogni richiesta di pull e la fusione risultante è disponibile (anche se praticamente non documentato) come

git fetch origin +refs/pull/298/merge 

cui richiesta di pull id è 298. e così tutte le richieste di pull fusi può essere recuperato con un carattere jolly in atto o f l'id in Teamcity e verrà creato automaticamente. La specifica filiale sarebbe simile a questa:

+refs/pull/*/merge 

EDIT: Tu dici che non si sta usando le richieste di pull quindi credo che si possa fare questo con alcuni comandi git. Non l'ho provato da solo, quindi questi sono solo alcuni suggerimenti per iniziare.

  1. Utilizzare il branch specification feature in Teamcity per ottenere il ramo. Impostare checkout mode per verificare il codice sull'agente
  2. In una fase di creazione unire il ramo master nel ramo di destinazione. Se il master non è disponibile sull'agente, potrebbe essere necessario prima recuperarlo. Se si verificano errori, la compilazione fallisce.

Per verificare la presenza di conflitti di unione, uno di questi strategies dovrebbe funzionare.

+0

@ Dylan-Beattie Utilizzerai le richieste di pull in Github o stai pensando di implementare il tuo flusso in Teamcity? –

+0

La funzione di richiesta pull Github è quasi esattamente quello che stavamo cercando - siamo in procinto di migrare da Subversion e non completamente alla massima velocità con tutti i campanelli e le sirene di Github ancora :) –

+0

@DanielLee Non vedo un costruisci l'opzione passo che ti permette di unire il master in un dato ramo. Come fai a fare questo? –

Problemi correlati