2016-08-22 12 views
7

In TFS 2015 haben wir einen Build, der automatisch ein neues Release auslöst. Es wird mit dem neuen script based build definitions realisiert.TFS 2015 Versionsverwaltungszugriff-Buildvariablen

Jetzt möchte ich eine Benutzervariable von Build zu Release übergeben. Ich habe eine Variable "Branch" im Build erstellt.

enter image description here

In der automatischen ausgelöste Freisetzung versuche ich es zuzugreifen. Aber es ist immer leer/nicht gesetzt.

Ich versuchte es mit und $(Build.Branch). Ich habe auch versucht, eine Variable in der Veröffentlichung mit diesen Namen ohne Erfolg zu erstellen.

Gibt es eine Chance, auf eine Benutzervariable aus der Builddefinition in der Version zuzugreifen?

+0

Werfen Sie einen Blick [hier] (https://lajak.wordpress.com/2011/03/ 13/Pass relatives Pfad Argumente zu msbuild-in-tfs2010-team-build /) und sehen, ob das hilft – lokusking

+0

Hallo lokusking, ich bin die neue skriptbasierten Trennverwaltung. Tut mir leid, ich habe es nicht erwähnt. – Chris

Antwort

4

Ich mache es jetzt mit einigen benutzerdefinierten Powershell-Skripten.

In der Build-Task schreibe ich eine XML-Datei mit den Variablen I in der Release-Aufgabe benötigen. Die XML-Datei ist später Teil des Artefakts.

Also zunächst einmal ich mein eigenes Skript mit dem Pfad zu der XML-Datei, die Variablennamen und dem aktuellen Wert nennen: ist wie folgt

enter image description here

Die Powershell-Skript. Ich kopieren Sie sie in das Artefakt Staging-Verzeichnis

<Variables> 
    <Branch>Main</Branch> 
</Variables> 

Dann, so dass es Teil des Artefakts ist:

Param 
(
    [Parameter(Mandatory=$true)] 
    [string]$xmlFile, 

    [Parameter(Mandatory=$true)] 
    [string]$variableName, 

    [Parameter(Mandatory=$true)] 
    [string]$variableValue 
) 

$directory = Split-Path $xmlFile -Parent 
If (!(Test-Path $xmlFile)){ 
    If (!(Test-Path $directory)){ 
    New-Item -ItemType directory -Path $directory 
    } 
    Out-File -FilePath $xmlFile 
    Set-Content -Value "<Variables/>" -Path $xmlFile 
} 

$xml = [System.Xml.XmlDocument](Get-Content $xmlFile); 
$xml["Variables"].AppendChild($xml.CreateElement($variableName)).AppendChild($xml.CreateTextNode($variableValue)); 
$xml.Save($xmlFile) 

Dies wird in einem XML wie dies zur Folge haben.

In der Freigabe Aufgabe verwende ich eine andere Powershell-Skript, das durch das Lesen der XML eine Aufgabe Variable setzt.

Der erste Parameter ist die Position der XML-Datei, der zweite die Taskvariable (Sie müssen die Variable in der Releasemanagement erstellen) und der letzte ist der Knotenname in der XML.

enter image description here

Die Powershell die XML und die Variable zu lesen ist wie folgt:

Param 
(
    [Parameter(Mandatory=$true)] 
    [string]$xmlFile, 

    [Parameter(Mandatory=$true)] 
    [string]$taskVariableName, 

    [Parameter(Mandatory=$true)] 
    [string]$xmlVariableName 
) 

$xml = [System.Xml.XmlDocument](Get-Content $xmlFile); 
$value = $xml["Variables"][$xmlVariableName].InnerText 

Write-Host "##vso[task.setvariable variable=$taskVariableName;]$value"