2015-12-28 20 views
6

Sto cercando di capire come chiudere il ciclo nel nostro processo di compilazione in cui applichiamo un numero di versione ai file AssemblyInfo. * Come parte del processo di compilazione.Come si esegue il checkin dei file come parte della compilazione in Visual Studio Team Services?

Siamo nel bel mezzo della migrazione da servizi di tfs on-premise a team di Visual Studio. Molte delle nostre build in loco aggiornate aggiornano il numero di versione per mantenerlo sincronizzato con il numero di build e inoltre ricontrollano tali file nel controllo del codice sorgente durante la compilazione.

Ho utilizzato con successo lo script located on msdn come esempio per iniziare a personalizzare il processo di compilazione.

Ora sto cercando di controllare i file di nuovo in controllo del codice sorgente, ma sto ricevendo l'errore:

#[error]TF30063: You are not authorized to access https://subdomain.visualstudio.com/DefaultCollection. 
#[error]Process completed with exit code 100 and had 1 error(s) written to the error stream. 

Attualmente sto usando tf.exe per tentare di fare questo. Per prima cosa prendi il percorso dello strumento nella parte superiore dello script di PowerShell;

# get the tf command line tool path 
$tfexe = [System.IO.Path]::GetFullPath($env:VS140COMNTOOLS + "..\..\common7\ide\tf.exe") 
if (-Not (Test-Path $tfexe)) 
{ 
    Write-Error "Could not find tf.exe at '$tfexe'" 
    exit 1 
} 
else 
{ 
    Write-Host "Found tf.exe at '$tfexe'" 
} 

Poi modificare il ciclo di checkout il file e quindi controllare i file di nuovo in.

# Apply the version to the assembly property files 
$files = gci $Env:BUILD_SOURCESDIRECTORY -recurse -include "*Properties*","My Project" | 
    ?{ $_.PSIsContainer } | 
    foreach { gci -Path $_.FullName -Recurse -include AssemblyInfo.* } 
if($files) 
{ 
    Write-Host "Will apply $NewVersion to $($files.count) files." 

    foreach ($file in $files) { 

     #Write-Host "Attempting to checkout file '$file'" 
     & ($tfexe) vc checkout $file 

     $filecontent = Get-Content($file) 
     attrib $file -r 
     $filecontent -replace $VersionRegex, $NewVersion | Out-File $file 
     Write-Host "$file.FullName - version applied" 
    } 

    # Checkin pending changes together 
    ##[error]TF30063: You are not authorized to access https://subdomain.visualstudio.com/DefaultCollection. 
    ##[error]Process completed with exit code 100 and had 1 error(s) written to the error stream. 
    Write-Host "Attempting to checkin files" 
    $comment = "Applied $NewVersion to $($files.count) files. ***NO_CI***" 
    & ($tfexe) vc checkin /comment:"$comment" /noprompt 
} 

È questo il modo corretto di fare questo? Se il servizio di costruzione non è autorizzato ad accedere, come diavolo può ottenere il codice, compilarlo e quindi postare l'artefatto da qualche parte?

+1

avrei preferito annullare le modifiche sulla 'AssemblyInfo *' file di controllarli nel controllo del codice sorgente.. –

+0

@ JuanM.Elosegui perché? –

+1

concordato. poiché le fonti archiviate non corrisponderanno a quelle registrate come il changeset utilizzato per la build, non corrisponderanno ai simboli e alle fonti indicizzate, interrompendo lo scenario avanzato di debug, la cronologia dei clutter e rimuovono la nozione di "versioni" per la maggior parte degli sviluppatori, causando loro di non incrementare correttamente durante il check in interruzioni di modifiche, versioni principali ecc. Raccomando l'uso di '1.2. *' e fare in modo che il server di build applichi la revisione automaticamente, controllando manualmente le versioni principali e secondarie. – jessehouwing

risposta

6

non mi consiglia di controllare la versione di assemblaggio ogni volta, invece vi consiglio di utilizzare il supporto dei caratteri jolly [assembly: AssemblyVersion("1.2.*")] (e rimuovere la [AssemblyFileVersion] in modo che sia corrispondente automaticamente.

check-in i file modificati dopo la compilazione ha problemi in diversi modi:

  • La funzione Sorgenti e simboli dell'indice utilizzerà le origini che non corrispondono al codice associato al changeset. interromperà scenari di debug avanzati.
  • funzioni avanzate di test si rompono e possono suggerire le prove indesiderati o di modifiche
  • Storia è ingombra di **NO_CI** di modifiche
  • Si rompe versioning semantica come questi tipi di script non fattore nel rompere le modifiche API e può causare un comportamento divertente.

ho creato un nuovo compito di build, che vi permetterà di file check-in utilizzando un compito:

aggiungerlo al tuo VisualStudio linea di TFS 2015 istanza utilizzando la console tfx:

tfx build tasks upload -taskpath path\to\project\root 

Sto ancora lavorando su un modo per aggiungere ed eliminare pendenze, ma sto riscontrando problemi con il modello di oggetti client in qualche modo non in attesa di altro che di modifiche.

sembra che chiamare tf add e tf delete funzionerà effettivamente nello script di build in combinazione con questa attività di archiviazione.

Per maggiori informazioni:

+0

Immagino per ora che non ho una forte argomentazione contro il mancato controllo dei file, seguirò il consiglio di non effettuare il check in. –

3

Come ho già commentato.

I would rather discard the changes on AssemblyInfo.* files than check them into the source control.

Nel mio caso io uso 1.$(date:yy).$(date:MMdd)$(rev:.r) come un formato numero di build

enter image description here

così sarò mai letto di nuovo la versione dai file un AssemblyInfo.*, quindi qual è il punto di salvataggio che le informazioni ?

La build formato numerico genererà la versione ancora una volta a prescindere il valore memorizzato del AssemblyInfo.*

Se si desidera sincronizzare il codice sorgente con una versione specifica è possibile utilizzare lo stesso formato numero di build per etichettare il codice sorgente.

enter image description here