【发布时间】: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?
这是我没有明确指定 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