如何从tfs2015中的不同项目访问$(Build.BuildNumber)

问题描述 投票:0回答:3

有两个项目,例如。 Project1和Project2。现在在project2中,我们需要创建一个发布定义,我们需要复制project1的构建定义的构建输出。

问题是我们不能像Project2版本中的Project1构建定义那样提供工件。

如果我们可以从Project2访问project1的$(Build.BuildNumber)变量,那么prolem将被解决。

请建议。

谢谢。

build msbuild tfsbuild tfs2015 release-management
3个回答
0
投票

您可以通过REST API访问构建号,步骤简单:

  1. 使用以下代码在项目中创建一个新的powershell脚本文件:

码:

Param(
    [string]$teamProject,
    [string]$collectionURL,
    [string]$buildId,
    [string]$userName,
    [string]$password
    )
$basicAuth = ("{0}:{1}" -f $userName,$password)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers = @{Authorization=("Basic {0}" -f $basicAuth)}
$url="$($collectionURL)$($teamProject)/_apis/build/builds/$($buildId)?api-version=2.0"
Write-Output $url
Function GetBuildNumber{
    $result = Invoke-RestMethod -Uri $url -headers $headers -Method Get
    Write-Output $result.buildNumber
    Write-Host "##vso[task.setvariable variable=anotherBuildNumber;]$($result.buildNumber)"
}
GetBuildNumber
  1. 检查源控件
  2. 队列构建和发布工件
  3. 编辑您的发布定义
  4. 添加这些变量

enter image description here

  1. 将PowerShell任务添加到您的发布定义中。 脚本文件名:[你的工件中的powershell脚本文件,例如$(System.DefaultWorkingDirectory)/PowerShellVnext/TFS2015U2Solution/PowerShellModuleProject1/RestTest.ps1]; 参数:-teamProject $(teamProject)-collectionURL $(System.TeamFoundationCollectionUri)-buildId $(buildId)-userName $(username)-passwor $(password)

之后,内部版本号值存储在anotherBuildNumber变量中。


0
投票

现在没有在TFS上链接其他团队项目构建工件的功能,但作为一种解决方法,您可以在Project2的发行版定义中添加Windows机器文件复制任务,以从Project1复制工件。这个question供您参考。


0
投票

简单,使用一点反射魔法

var version = typeof(Program).Assembly
              .GetCustomAttribute<AssemblyFileVersionAttribute>().Version;

您可以将typeof([ClassName])替换为您喜欢的任何类名,以从甚至反射类型中获取版本。这种技术在记录错误时非常有用,因为您可以从依赖程序集获取文件版本,也可以在范围内获取任何类。

这不是你要求的,但是,我确信有些人也需要这个......如果你需要构建日期,你可以通过使用:

var date = new FileInfo(typeof(Program).Assembly.Location).CreationTime;
© www.soinside.com 2019 - 2024. All rights reserved.