【问题标题】:Build.SourceVersion is blank in VSO vNext BuildBuild.SourceVersion 在 VSO vNext Build 中为空白
【发布时间】:2015-09-16 08:46:26
【问题描述】:

我在 Visual Studio Online 中使用新的可编写脚本的构建功能(不是 XAML 构建定义),并且我试图让构建版本号包含使用内部版本号格式的目标存储库的最新 Git 提交 ID。

我正在使用以下版本号格式:

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion)

这会导致生成的版本号为1.0.1234. - 即 SourceVersion 值为空白,这会在排队构建时导致 VSO 出错。我还尝试通过在变量前面加上 Build. 来限定变量,结果相同。为了测试,我已将内部版本号更改为以下格式:

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceBranch)

这正确地导致了1.0.1234.refs_heads_master的值

我一直在使用 Predefined Variables 引用,并且 Build.SourceVersion 被列为全局变量。

我是不是做错了什么,我是否遇到了错误,或者这是设计使然,在构建排队时不可用?如果这是设计使然,有没有办法在内部版本号格式中自动包含简短的 Git 提交 ID?

这是我在 VSO 中设置内部版本号格式的地方:

这是我没有明确指定 Git CommitId 时看到的错误:

400:内部版本号格式字符串 $(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion) 生成 内部版本号 0.1.1。其中包含无效字符,也是 长,或以“.”结尾。内部版本号的最大长度为 255 人物。不允许使用的字符包括'"'、'/'、':'、 ''、'\'、'|'、'?'、'@' 和 '*'。

【问题讨论】:

  • 我可以用$(MajorVersion).$(MinorVersion).$(Build.BuildId).$(Build.SourceVersion)实现你所描述的。刚刚在 VSO 和 TFS 2015 本地验证。输出如下所示:1.0.20.41f2983578f720695227a7a8a41ed3d7437efc30。您确定这不是导致您出现这种奇怪行为的错字吗?
  • @YanSklyarenko,如果我使用 $(MajorVersion).$(MinorVersion),我总是得到“无法扩展以内部版本号格式指定的宏 $(Build.SourceVersion)(类型 InvalidMacroInBuildNumberException)”异常.$(Build.BuildId).$(Build.SourceVersion) 定义内部版本号格式。此外,SourceVersion 变量是此构建中包含的最新版本控制更改。 CommitId 或变更集编号(例如 CS1234),不应类似于“41f2983578f720695227a7a8a41ed3d7437efc30”。我错过了什么重要的事情吗?
  • @Vicky,嗯,我想这是另一回事。看起来那个异常(InvalidMacroInBuildNumberException)意味着内部版本号格式无效。我的意思是,它希望 Major.Minor.Build.Revision 都是数字,而不是那些 ID 和哈希。 $(Build.SourceVersion) 的宏部分有效,但您不能在内部版本号中使用它。您的其他评论 - Git 中的提交 ID 是长哈希,CS1234 是 TFVC 变更集的格式。
  • @YanSklyarenko 我确实尝试了$(Build.SourceVersion)$(SourceVersion) 两者都导致了一个空白值,除非我在排队构建时明确指定了完整的Git Commit ID。由于这是为了持续集成,我需要自动获取最新的 Git 提交 ID。理想情况下,我也想要短哈希。我应该澄清一下,这是 VSO Scriptable Build (vNext) 中的“内部版本号格式”,而不是 XAML 构建定义。
  • @GaryJL,现在我很困惑。或许,你截个图会更清楚……

标签: git azure-devops azure-pipelines


【解决方案1】:

我可以使用$(Build.SourceVersion),但只有在提交时自动触发构建时(在持续集成中)。只有当我手动排队时它才证明是空的:

我正在使用以下内部版本号格式:

$(BuildDefinitionName)_$(date:yyyyMMdd)_$(Build.BuildId).$(Build.SourceVersion)$(rev:.r)

【讨论】:

  • @MonDeveloper 是的,当我使用上述格式字符串时,它会自动填充 CI 触发的构建。在手动对构建进行排队时,似乎也可以指定源版本,有关详细信息,请参阅 Will 的答案。
【解决方案2】:

NeoGarRiGus - 结果是空的,因为当您运行手动构建时,您必须输入“源版本”字段才能填充它。 CI 会在 Dev 检查时自动输入该值,但当您手动排队构建时,弹出窗口中有一个空白字段允许您输入源版本:

Source Version Field in VSTS

【讨论】:

    【解决方案3】:

    恐怕它无法在内部版本号格式中使用$(SourceVersion)。但是,我认为您可以使用 PowerShell 将内部版本号更改为 $(SourceVersion),并且您需要在构建过程中包含 PowerShell。检查此链接以获取详细信息。

    您可以将 PowerShell 定义为类似于:

    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client")
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
    [System.Reflection.Assembly]::LoadWithPartialName("System.Net")
    
    [String] $CollectionUrl = "https://vsoserver.visualstudio.com/defaultcollection"
    [String] $BuildUrl = $env:BUILD_BUILDURI 
    
    $netCred = New-Object System.Net.NetworkCredential("username","password")
    $basicCred = New-Object Microsoft.TeamFoundation.Client.BasicAuthCredential($netCred)
    $tfsCred = New-Object Microsoft.TeamFoundation.Client.TfsClientCredentials($basicCred)
    
    
    $teamProjectCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($CollectionUrl,$tfsCred)
    
    $buildServer = $teamProjectCollection.GetService([type]"Microsoft.TeamFoundation.Build.Client.IBuildServer")
    
    $buildDetail = $buildServer.GetBuild([Uri]$BuildUrl)
    
    $buildDetail.BuildNumber = $Env:BUILD_SOURCEVERSION 
    
    $buildDetail.KeepForever = $true
    $buildDetail.Save()
    

    【讨论】:

    • 这看起来很有用。如果我没有找到使用预定义变量的解决方案,我会记住这一点。
    • 我会说这是目前唯一可能的解决方案。
    • 嗨@Yan,我正在使用您的解决方案,但出现错误 System.InvalidOperationException :基本身份验证需要与服务器建立安全连接。就在这一行 IBuildDetail buildDetail = buildServer.GetBuild(BuildUrl);
    • 不是我的解决方案...@vicky-msft,你有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多