2015-12-28 5 views
6

Ich versuche herauszufinden, wie man die Schleife in unserem Build-Prozess schließt, wo wir eine Versionsnummer als Teil des Build-Prozesses auf die AssemblyInfo. * - Dateien anwenden.Wie checken Sie Dateien als Teil des Builds in Visual Studio Team Services ein?

Wir sind gerade dabei, von On-Premise-TFS zu Visual Studio Team Services zu migrieren. Viele unserer aktuellen On-Premise-Builds aktualisieren die Versionsnummer, um sie mit der Build-Nummer synchron zu halten und diese Dateien während des Builds wieder in die Quellcodeverwaltung zu überführen.

Ich habe erfolgreich die script located on msdn als ein Beispiel verwendet, um den Build-Prozess anzupassen.

bin ich versucht nun die Dateien wieder in die Quellcodeverwaltung zu überprüfen, aber ich erhalte die Fehlermeldung:

#[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. 

ich tf.exe bin derzeit mit diesem versuchen, zu tun. Rufen Sie zuerst den Pfad zum Tool oben im Powershell-Skript ab.

# 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'" 
} 

ändern Sie dann die Schleife, um die Datei zur Kasse und dann die Dateien wieder einzuchecken.

# 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 
} 

Ist dies der richtige Weg, dies zu tun? Wenn der Build-Dienst nicht berechtigt ist, darauf zuzugreifen, wie zum Teufel kann er den Code holen, kompilieren und dann das Artefakt irgendwo POST?

+1

Ich würde lieber die Änderungen auf 'Assembly verwerfen *' Dateien als sie in die Quellcodeverwaltung überprüfen.. –

+0

@ JuanM.Elosegui warum? –

+1

Einverstanden. Da die eingecheckten Quellen nicht mit denen übereinstimmen, die als Changeset für den Build aufgezeichnet wurden, stimmen sie nicht mit den Symbolen und indizierten Quellen überein, wodurch erweiterte Debug-Szenarien zerstört und der Begriff "Versionen" für die meisten Entwickler gelöscht wird Sie werden nicht korrekt inkrementiert, wenn Änderungen, Hauptversionen usw. eingecheckt werden. Ich empfehle die Verwendung von '1.2. *' und lasse den Build-Server die Revision automatisch anwenden, während man Haupt- und Nebenversionen manuell steuert. – jessehouwing

Antwort

6

Ich würde die [assembly: AssemblyVersion("1.2.*")] Wildcard-Unterstützung nicht empfehlen, jedes Mal in der Montage-Version zu überprüfen, anstatt zu verwenden, würde ich empfehlen, (und ich entferne die [AssemblyFileVersion] so wird er automatisch passend.

Einchecken Die geänderten Dateien nach dem Build weisen verschiedene Probleme auf:

  • Die Funktion Indexquellen und Symbole verwendet Quellen, die nicht mit dem mit dem Änderungssatz verknüpften Code übereinstimmen unterbricht erweiterte Debugging-Szenarien.
  • erweiterte Testfunktionen brechen und unerwünschte Tests oder Change
  • Geschichte mit **NO_CI** Change unübersichtlich könnte darauf hindeuten,
  • Es bricht semantische Versionierung als diese Art von Skripten nicht Faktor API-Änderungen zu brechen und kann lustig Verhalten führen.

habe ich eine neue Build-Task, die Sie Dateien erlauben wird, beim Check-in eine neue Aufgabe mit:

Fügen Sie es zu Ihrem Visual Studio Online von TFS 2015 Instanz unter Verwendung der tfx Konsole:

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

Ich arbeite immer noch an einer Möglichkeit, fügt hinzu und löscht, aber ich habe Probleme mit dem Client-Objekt-Modell irgendwie nicht anhängig nichts anderes als Änderungen.

es sieht aus wie Aufruf tf add und tf delete wird tatsächlich im Build-Skript in Kombination mit dieser Check-Task arbeiten.

Für weitere Informationen:

+0

Ich denke jetzt, da ich kein starkes Argument gegen das Einchecken der Dateien habe, werde ich dem Rat folgen, das Einchecken nicht zu machen. –

3

Wie ich bereits zuvor kommentiert.

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

In meinem Fall verwende ich 1.$(date:yy).$(date:MMdd)$(rev:.r) als Build-Nummer Format

enter image description here

Also werde ich nie die Version aus den a AssemblyInfo.* Dateien lesen Sie zurück, so was ist der Punkt, dass die Informationen des Sparens ?

Die Build-Nummer Format wird die Version wieder unabhängig den Wert des

AssemblyInfo.*

gespeichert erzeugen Wenn Sie Quellcode mit einer bestimmten Version synchronisieren möchten Sie das gleiche Build-Nummer Format verwenden könnte, den Quellcode zu beschriften.

enter image description here

Verwandte Themen