2016-08-22 4 views
7

В TFS 2015 у нас есть сборка, которая автоматически инициирует новый выпуск. Реализовано с новым script based build definitions.TFS 2015 Варианты построения доступа к управлению версиями

Теперь я хочу передать пользовательскую переменную из сборки для выпуска. Я создал переменную «Ветвь» в сборке.

enter image description here

В автоматически срабатывает релизе я пытаюсь получить к нему доступ. Но он всегда пуст/не установлен.

Я попробовал это с $(Branch) и $(Build.Branch). Я также попытался создать переменную в выпуске с этими именами без успеха.

Есть ли вероятность получить доступ к пользовательской переменной из определения сборки в выпуске?

+0

Посмотрите [здесь] (https://lajak.wordpress.com/2011/03/ 13/pass-relative-path-arguments-to-msbuild-in-tfs2010-team-build /) и посмотреть, помогает ли это – lokusking

+0

Привет lokusking, я использую новое управление выпуском на основе сценариев. Извините, я не упоминал об этом. – Chris

ответ

4

Я делаю это сейчас с помощью некоторых пользовательских сценариев powershell.

В задаче построения я пишу XML-файл с переменными, которые мне нужны в задаче выпуска. XML-файл позже является частью Artifact.

Итак, прежде всего я называю пользовательский скрипт с пути к файлу XML, имя переменной и текущего значения:

enter image description here

Скрипт PowerShell, как это.

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) 

Это приведет к XML, как это:

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

Затем я скопировать его в каталог постановка артефакт, так что она является частью артефакта.

В задаче освобождения я использую другой скрипт powershell, который задает переменную задачи, читая xml.

Первый параметр - это позиция файла xml, вторая - переменная задачи (вам нужно создать переменную в управлении выпуском), а последнее - имя узла в xml.

enter image description here

PowerShell для чтения XML и установить переменную как это:

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"