2016-04-06 26 views
5

Quando si crea un build vNext su TFS 2015 è possibile definire variabili, che vengono quindi utilizzate nelle fasi di creazione e che possono anche essere utilizzate come variabili di ambiente negli script eseguiti dalla generazione.build TFS 2015: è possibile utilizzare le variabili nei mapping di repository?

La build su cui sto lavorando esegue script che estraggono file da percorsi mappati, quindi sarebbe bello se potessi definire una variabile e usarla in una mappatura in modo che, ad esempio, se aggiorno un riferimento nel progetto, il build sta costruendo, posso semplicemente aggiornare la variabile con la nuova posizione e fare in modo che i mapping e gli script del repository vengano estratti correttamente dalla nuova posizione senza dover apportare modifiche in più posizioni.

Ho provato a fare questo impostando la variabile e la mappatura come segue, enter image description here enter image description here Ma questo genera un errore quando si tenta di salvare la build lamentano che ci sono due '$' caratteri nella mappatura. C'è un modo per fare questo o non è attualmente possibile?

risposta

2

È impossibile. Proprio come il messaggio di errore menzionato: ci sono due caratteri '$' nella mappatura. Il che significa che il percorso dell'applicazione non dovrebbe variare da una build all'altra.

Mapping nella pagina Repository vengono utilizzati per specificare controllo del codice sorgente cartella che contiene i progetti che devono essere costruiti nella build definizione. È possibile impostarlo facendo clic sul pulsante Ellipsis (...), tuttavia, non è possibile includere variabili nel percorso di mappatura.

C'è una domanda simile: Variables in TFS Mappings on Visual Studio Online Team Builds

+3

Si è corretti sulla funzione, ma è errato nell'asserzione che i percorsi non debbano passare da una build all'altra. È comune avere più di un ambiente durante lo sviluppo e il processo per costruirlo idealmente dovrebbe essere identico. Inserendo manualmente questi sottostrutture/rami separati, questo diventa un punto di errore e confonde anche l'ambiente di costruzione con voci duplicate che fanno esattamente la stessa cosa. Questo equivale a inserire dati duplicati in un database per qualcosa come l'indirizzo del cliente ed è un grave difetto di progettazione. – user2197169

4

Questo è stato mi ha causato Havok per un bel po 'pure.

Per i principianti, esiste una richiesta di servizio per questa funzione. Puoi aggiungere i tuoi voti e inserire qui per ottenere Microsoft per consentire questa funzionalità: https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/14131002-allow-variables-in-repository-variables-and-trigg

In secondo luogo, abbiamo sviluppato una soluzione che ci ottiene la maggior parte del modo lì. Non è perfetto, ma potrebbe esserti utile se sei a tuo agio con i compromessi o se riesci a ovviare alle carenze.

Inizia disattivando l'opzione "Origini etichetta" della build e mappando il campo Percorso server alla build di base. Vorrete aggiungere una variabile personalizzata alla definizione di costruzione per dire all'istanza di costruzione quale posizione TFS da cui estrarre. Per esempio, abbiamo un progetto di base e rami quindi più dal progetto, così la nostra fonte è strutturato come questo

$\Team Project\Project1 
$\Team Project\Project1Branch1 
$\Team Project\Project1Branch2 
$\Team Project\Project1Branch3 

e creiamo una variabile denominata "filiale" che siamo in grado di impostare su "Branch1", "Branch2 ", e così via.

Quando vogliamo creare il progetto di base, lasciamo vuota la variabile Branch quando avviiamo la build. Per le build del ramo, lo impostiamo sul nome del ramo che vogliamo costruire.

Poi i nostri passi di compilazione simile a questa

  • Remap Workspace cartella per Branch cartella
  • ottenere i file per Branch specificato - Dobbiamo farlo manualmente dopo rimappatura il nostro spazio di lavoro
  • compilare il sorgente in il ramo specificato
  • Pubblica manufatti di costruzione dal ramo specificato
  • Contrassegnare manualmente il codice del ramo specificato

Il compito Remap corre il comando

tf workfold "$/Team Project/Project1$(Branch)" "$(build.sourcesDirectory)\$(Build.DefinitionName)$(Branch)" 

Il compito Get manuale esegue il comando seguente

get /recursive /noprompt "$/Team Project/Project1$(Branch)" 

La build utilizza la variabile Branch per puntare alla posizione corretta del file di soluzione per il ramo specificato

$(build.sourcesDirectory)\$(Build.DefinitionName)$(Branch)\SolutionFile.sln 

The Publ ish compito Artefatti utilizza la variabile Sede in entrambi il campo dei contenuti e l'esempio campo Percorso nel Sommario

**\$(Build.DefinitionName)$(Branch)\bin 

Il Label compito codice utilizza il seguente comando

tf label "$(build.buildNumber)" "$/Team Project/Project1$(Branch)" /recursive 

L'aspetto negativo di questa configurazione è che si non acquisire modifiche e articoli di lavoro associati alle filiali secondarie poiché il campo Percorso server è sempre impostato sulla posizione principale. Questo potrebbe non essere un problema se ti unisci sempre dalle tue filiali alla tua posizione principale prima di avviare una build destinata alla produzione. Quello che puoi fare per compensare questo dipende molto dal tuo caso d'uso.

Con alcuni aggiustamenti, è possibile utilizzare questo stesso formato per specificare anche percorsi completi se necessario.

+0

Hai risolto il problema in modo elegante entro i limiti di VSTS. Tuttavia ci sono problemi di prestazioni che utilizzano questo approccio. Abbiamo molte filiali di rilasci e dobbiamo controllare tutto prima di una costruzione che ritengo sia piuttosto lenta. – dynamokaj

+0

Grazie per il complimento. Non sono sicuro di ciò a cui ti riferisci quando dici "dover controllare tutto prima di una costruzione". Il controllo dei file non dovrebbe essere necessario in questo caso (sebbene le nostre build abbiano un'operazione di checkout, non sono necessarie per questo problema e ho semplicemente dimenticato di rimuovere i riferimenti e non li vedo ora). – mattbbpl

+0

Dopo aver riflettuto per un po 'sul tuo commento, penso che ti riferisci alle operazioni "Ottieni" su ciascun ramo. In tal caso, non preoccuparti: la soluzione sopra solo "Ottiene" la fonte dalla posizione principale (il percorso nel campo Percorso server) e il ramo specifico specificato dalla variabile "Ramo".Quindi, mentre è vero che "ottiene" un ramo non necessario a meno che non sia specificamente una build principale, è solo uno - non "ottiene" ogni ramo nella soluzione. – mattbbpl