2015-09-21 10 views
-1

Мы используем TFS Build 2013, и я настраиваю нашу стратегию сборки. Мы хотим сохранить его как можно более дефолтным, поэтому мы хотим использовать шаблон процесса построения по умолчанию без каких-либо пользовательских действий. Вместо этого у нас есть несколько сценариев Powershell, которые связаны с шаблоном по умолчанию. Один из этих сценариев извлекает номер версии из проекта для сборки.Как передать параметры из сценария powershell в сборку TFS 2013?

Проблема: Я хочу проанализировать этот номер версии в номере сборки, чтобы наши сборки имели приятное и содержательное имя (например, Project - 2.1.2.46), и нам не нужно менять определение сборки для каждой версии.

Что я в основном хочу достичь, так это то, что результат моего скрипта сборки (ниже) используется как номер сборки (формат).

# Enable -Verbose option 
[CmdletBinding()] 
# Disable parameter 
# Convenience option so you can debug this script or disable it in 
# your build definition without having to remove it from 
# the 'Post-build script path' build process parameter. 
param([switch]$Disable) 
if ($PSBoundParameters.ContainsKey('Disable')) 
{ 
    Write-Verbose "Script disabled; no actions will be taken on the files." 
} 

# Regular expression pattern to find the version in the assemblies 
# and then apply it to the build number 
$AssemblyFileVersionRegex = 'AssemblyFileVersion\("\d+\.\d+\.\d+\.\d+"' 

# Make sure path to source code directory is available 
if (-not $Env:TF_BUILD_SOURCESDIRECTORY) 
{ 
    Write-Error ("TF_BUILD_SOURCESDIRECTORY environment variable is missing.") 
    exit 1 
} 
elseif (-not (Test-Path $Env:TF_BUILD_SOURCESDIRECTORY)) 
{ 
    Write-Error "TF_BUILD_SOURCESDIRECTORY does not exist: $Env:TF_BUILD_SOURCESDIRECTORY" 
    exit 1 
} 
Write-Verbose "TF_BUILD_SOURCESDIRECTORY: $Env:TF_BUILD_SOURCESDIRECTORY" 

# Make sure build definition name is available 
if (-not $Env:TF_BUILD_BUILDDEFINITIONNAME) 
{ 
    Write-Error ("TF_BUILD_BUILDDEFINITIONNAME environment variable is missing.") 
    exit 1 
} 

# Apply the version to the assembly property files 
$files = gci $Env:TF_BUILD_SOURCESDIRECTORY -recurse -include "*Properties*", "Solution Items" | 
    ?{ $_.PSIsContainer } | 
    foreach { gci -Path $_.FullName -Recurse -include CommonAssemblyInfo.*, AssemblyInfo.* } 
if($files) 
{ 
    foreach ($file in $files) { 

     if(-not $Disable) 
     { 
      $fileContent = Get-Content $file 
      $found = $fileContent -match $AssemblyFileVersionRegex 

      if ($found) 
      { 
       Write-Verbose "Found in files: $found" 

       $VersionData = $found -replace [Regex]::Escape('[assembly: AssemblyFileVersion("'), '' 
       $VersionData = $VersionData -replace [Regex]::Escape('")]'), '' 
       Write-Verbose "Will apply $VersionData to build number" 

       $Env:TF_BUILD_BUILDNUMBER = $Env:TF_BUILD_BUILDDEFINITIONNAME + ' - ' + $VersionData 
       Write-Verbose "TF_BUILD_BUILDNUMBER: $Env:TF_BUILD_BUILDNUMBER" 

       exit 0 
      } 
      else 
      { 
       Write-Warning "No version number found in files. Build number will not be changed." 
      }   
     } 
    } 
} 
else 
{ 
    Write-Warning "Found no files." 
} 

С ведением подробного журнала, я вижу, что мой сценарий PowerShell разбирает правильный номер версии в переменной TF_BUILD_BUILDNUMBER. Итак, это показывает мне, что мой скрипт работает. Однако, когда сборка завершена, номер сборки изменился на свое значение по умолчанию, которое было предоставлено в определении сборки.

Любая помощь будет оценена!

ответ

0

Я сам нашел ответ: невозможно обновить переменные среды, например. TF_BUILD_BUILDNUMBER, используя PowerShell и снова использовать обновленные значения в вашей сборке. Он всегда будет возвращаться к значениям по умолчанию, которые определяются при запуске сборки.

0

вы можете изменить сценарий powershell и проверить имя последней папки (имя папки). Предположим, если последнее имя равно 1.2.45, то в вашем скрипте powershell вы можете увеличить его на один младший номер версии.

+0

Я получаю номер версии уже из файлов AssemblyInfo. Это не проблема. Я хочу использовать это число, однако, как имя папки drop/build. Тем не менее, я не знаю, как я могу изменить это место падения из моего сценария Powershell. – Sjoerdson

+0

Вы можете поделиться своим сценарием PowerShell? –

+0

Конечно, я обновил свой вопрос. Это стандартный сценарий, который я изменил для своих нужд. Я думаю, это не лучший код PowerShell, но он делает магию; он получает номер версии из проекта и помещает его в $ Env: TF_BUILD_BUILDNUMBER. – Sjoerdson