Jez*_*Jez 1 git msbuild powershell
我正在使用PowerShell脚本调用msbuild
并将版本号传递给OctopusDeploy,如下所示:
msbuild "Xyz.sln" /t:Rebuild /p:Configuration=Release /p:RunOctoPack=true /p:OctopackPackageVersion=$versionNumber
Run Code Online (Sandbox Code Playgroud)
...在PS脚本中生成$ versionNumber.我想要做的是将Git提交哈希的前16个字符添加到版本字符串的末尾,这样它最终看起来像:
2.yyyyMMdd.HHmmss-git-6d34e44340f95c2a
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?我可以得到msbuild
或Visual Studio以某种方式返回当前的git commit hash,考虑到他们现在有内置的Git支持吗?
您实际上可以直接在msbuild中执行此操作,以便它可以在VS和大多数CI系统中运行而无需任何额外步骤(例如PowerShell脚本),即使在跨平台dotnet
CLI和单声道上也是如此.
您可以Directory.Build.targets
使用以下内容创建项目或解决方案(>影响所有项目)目录中的文件(假设MSBuild 15/VS 2017.如果更低,则需要手动导入或将此目标插入到每个项目中)
<Project>
<Target Name="DetermineOctopackVersion" BeforeTargets="Build" Condition=" '$(RunOctoPack)' == 'true' ">
<Exec Command="git rev-parse HEAD" ConsoleToMSBuild="true" StandardOutputImportance="low">
<Output TaskParameter="ConsoleOutput" PropertyName="GitCommitHash" />
</Exec>
<PropertyGroup>
<VersionDatePart>$([System.DateTime]::get_Now().ToString(yyyyMMdd.HHmmss))</VersionDatePart>
<OctopackPackageVersion>2.$(VersionDatePart)-git-$(GitCommitHash.Substring(0,16))</OctopackPackageVersion>
</PropertyGroup>
</Target>
</Project>
Run Code Online (Sandbox Code Playgroud)
如果您希望属性上每次构建设置,不仅当RunOctoPack
是true
时,只要将Condition
属性.
但是如果您需要在PowerShell中执行此操作,则可以调用git命令并捕获其输出:
$commitHash = (git rev-parse HEAD).Substring(0,16)
$versionDatePart = [System.DateTime]::Now.ToString('yyyyMMdd.HHmmss')
$version = "1.$versionDatePart-git-$commitHash"
Run Code Online (Sandbox Code Playgroud)
如果你真的想避免调用git
(虽然没有正确的构建系统设置完成没有git安装..)你也可以使用[System.IO.File]::ReadAllText(".git\refs\heads\master")
PS或MSBuild来读取git目录(在分离状态,.git\HEAD
将包含哈希,当使用分支它将包含查找散列的文件的位置.
归档时间: |
|
查看次数: |
1791 次 |
最近记录: |