我想在我的包的名称中包含当前的Git分支名称(然后通过Octopus部署)。
如果这是TFS 2015或2017,我可以在构建定义中将构建号格式设置为$(SourceBranchName)-something
。或者我可以在$(BUILD_SOURCEBRANCHNAME)
文件中使用构建变量.proj
。
但我使用的是TFS 2013,因此我无法使用这些新变量。
如何在TFS 2013中实现同样的目标?
我试图通过Git命令获取分支名称:
<Exec Command="git rev-parse --abbrev-ref HEAD" ContinueOnError="false" IgnoreExitCode="true" ConsoleToMsBuild="true">
<Output TaskParameter="ConsoleOutput" PropertyName="CurrentGitBranch" />
</Exec>
但这个输出只是HEAD
。
我也尝试将命令更改为:
git symbolic-ref --short HEAD
返回fatal: ref HEAD is not a symbolic ref
。
因此,构建服务器上的签出存储库似乎没有指向任何特定分支。
答案 0 :(得分:2)
正如Martin Ullrich所指出的,当前的git分支存储在构建变量TF_BUILD_SOURCEGETVERSION
中。存储的值具有以下格式:
LG:refs/heads/branches/your-branch:71f12206f54365098b2d11cbf08844e82b664594
不确定LG
是什么,但第二部分是分支名称,最后一部分是提交哈希。解析这些信息非常容易:
<Target Name="ParseGitInfo">
<PropertyGroup>
<GitBranch>$(TF_BUILD_SOURCEGETVERSION.Split(':')[1])</GitBranch>
<GitBranchName>$(GitBranch.Substring($([MSBuild]::Add($(GitBranch.LastIndexOf('/')), 1))))</GitBranchName>
</PropertyGroup>
</Target>