Azure devops 在devops构建中使用日期作为主要版本的Gitversion

Azure devops 在devops构建中使用日期作为主要版本的Gitversion,azure-devops,gitversion,Azure Devops,Gitversion,我有几个Web应用程序,我正在添加gitversion。主要问题-GitVersion正在生成一个MajorMinorPatchTag,其中Major的格式为yyyymmdd。除了这不是一个有效的主要版本之外,我希望在下面的示例中使用通常的版本控制0.1.3.alpha.1,但是我得到了20201021.1.1 我已经从repo中删除了所有旧的build标记,因此它似乎没有从标记中找到它。是否还有其他地方可以强制它忽略以前的构建版本并使用从gitversion.yml/next-version设

我有几个Web应用程序,我正在添加gitversion。主要问题-GitVersion正在生成一个MajorMinorPatchTag,其中Major的格式为yyyymmdd。除了这不是一个有效的主要版本之外,我希望在下面的示例中使用通常的版本控制0.1.3.alpha.1,但是我得到了20201021.1.1

我已经从repo中删除了所有旧的build标记,因此它似乎没有从标记中找到它。是否还有其他地方可以强制它忽略以前的构建版本并使用从gitversion.yml/next-version设置开始的semver

详情如下:

gitversion.yml很简单:

assembly-versioning-scheme: MajorMinorPatchTag
mode: Mainline 
next-version: 0.1.3 
increment: Inherit
branches:
 feature:
   tag: alpha
 master:
   tag: 
ignore:
 sha: []
DevOps构建任务已完成

吉特版本

建造

"

gitversion任务的输出如下所示:

Installing GitVersion.Tool version 5.x
-------------------------- 
Found tool in cache: GitVersion.Tool 5.3.7 x64
Prepending PATH environment variable with directory: C:\DevOps\_work\_tool\GitVersion.Tool\5.3.7\x64
C:\DevOps\_work\_tool\GitVersion.Tool\5.3.7\x64\dotnet-gitversion.exe C:/DevOps/_work/31/s /output buildserver /nofetch
INFO [10/21/20 20:51:49:55] Working directory: C:/DevOps/_work/31/s
INFO [10/21/20 20:51:49:57] Branch from build environment: refs/heads/master
INFO [10/21/20 20:51:49:57] Project root is: C:\DevOps\_work\31\s\
INFO [10/21/20 20:51:49:57] DotGit directory is: C:\DevOps\_work\31\s\.git
INFO [10/21/20 20:51:49:57] Begin: Normalizing git directory for branch 'refs/heads/master'
INFO [10/21/20 20:51:49:61] One remote found (origin -> 'https://example.com/asfalis/Legacy/_git/example.WebApi.exampleWebhookHandler').
INFO [10/21/20 20:51:49:61] Skipping fetching, if GitVersion does not calculate your version as expected you might need to allow fetching or use dynamic repositories
INFO [10/21/20 20:51:49:61] Updating local branch refs/heads/master to point at 0311e72378d5187490b39eddbfff243643b952c1
INFO [10/21/20 20:51:49:65] HEAD points at branch 'refs/heads/master'.
INFO [10/21/20 20:51:49:65] End: Normalizing git directory for branch 'refs/heads/master' (Took: 78.57ms)
INFO [10/21/20 20:51:49:67] Begin: Loading version variables from disk cache
INFO [10/21/20 20:51:49:67] Begin: Deserializing version variables from cache file C:\DevOps\_work\31\s\.git\gitversion_cache\59EC1078831A476936644C50EA5AB6347D5E7CD7.yml
INFO [10/21/20 20:51:49:73] End: Deserializing version variables from cache file C:\DevOps\_work\31\s\.git\gitversion_cache\59EC1078831A476936644C50EA5AB6347D5E7CD7.yml (Took: 61.06ms)
INFO [10/21/20 20:51:49:73] End: Loading version variables from disk cache (Took: 63.28ms)
INFO [10/21/20 20:51:49:75] Using latest commit on specified branch
Executing GenerateSetVersionMessage for 'AzurePipelines'.
Executing GenerateBuildLogOutput for 'AzurePipelines'.
INFO [10/21/20 20:51:49:79] Done writing 
Async Command Start: Update Build Number
Update build number to 20200619.1.1+1 for build 441
Async Command End: Update Build Number
Finishing: GitVersion
在生成过程中出现错误

....AssemblyInfo.cs(19,55): Error CS7034: The specified version string does not conform to the required format - major[.minor[.build[.revision]]]
更新1

移动到GitTools捆绑包后,这是“建立版本”任务的输出:

C:\DevOps\_work\_tool\GitVersion.Tool\5.1.3\x64\dotnet-gitversion.exe C:/DevOps/_work/31/s /output json /output buildserver
{
  "Major":20200619,
  "Minor":1,
  "Patch":1,
  "PreReleaseTag":"",
  "PreReleaseTagWithDash":"",
  "PreReleaseLabel":"",
  "PreReleaseNumber":"",
  "WeightedPreReleaseNumber":"",
  "BuildMetaData":1,
  "BuildMetaDataPadded":"0001",
  "FullBuildMetaData":"1.Branch.master.Sha.0311e72378d5187490b39eddbfff243643b952c1",
  "MajorMinorPatch":"20200619.1.1",
  "SemVer":"20200619.1.1",
  "LegacySemVer":"20200619.1.1",
  "LegacySemVerPadded":"20200619.1.1",
  "AssemblySemVer":"20200619.1.1.0",
  "AssemblySemFileVer":"20200619.1.1.0",
  "FullSemVer":"20200619.1.1+1",
  "InformationalVersion":"20200619.1.1+1.Branch.master.Sha.0311e72378d5187490b39eddbfff243643b952c1",
  "BranchName":"master",
  "Sha":"0311e72378d5187490b39eddbfff243643b952c1",
  "ShortSha":"0311e72",
  "NuGetVersionV2":"20200619.1.1",
  "NuGetVersion":"20200619.1.1",
  "NuGetPreReleaseTagV2":"",
  "NuGetPreReleaseTag":"",
  "VersionSourceSha":"e40a0b671680c65428fe13610ee4cca25eefeaac",
  "CommitsSinceVersionSource":1,
  "CommitsSinceVersionSourcePadded":"0001",
  "CommitDate":"2020-10-21"
}
已被弃用,因此我建议您切换到,然后可以这样使用:

步骤: -任务:gitversion/setup@0 已启用:true displayName:安装GitVersion 投入: 版本规范:“5.1.3” -任务:gitversion/execute@0 已启用:true displayName:“建立版本” -powershell:写入主机vso[build.updatebuildnumber]$FullSemVer displayName:“将内部版本号更新为$FullSemVer” 然后你可以试试

-任务:DotNetCoreCLI@2 显示名称:构建 投入: 项目:“$Parameters.RestoreBuildProjects” 参数:'-configuration$BuildConfiguration/p:Version=$FullSemVer 请检查这个

步骤: -任务:gitversion/setup@0 displayName:安装GitVersion 投入: 版本规范:“5.1.3” -任务:gitversion/execute@0 displayName:使用GitVersion -脚本:| echo FullSemVer:$FullSemVer echo vso[build.updatebuildnumber]$fullSemVer echo Major:${{steps.gitversion.outputs.Major} 次要回声:${steps.gitversion.outputs.Minor} 回显修补程序:${{steps.gitversion.outputs.Patch} echo PreReleaseTag:${{steps.gitversion.outputs.PreReleaseTag}} echo PreReleaseTagWithDash:${{steps.gitversion.outputs.PreReleaseTagWithDash} echo PreReleaseLabel:${{steps.gitversion.outputs.PreReleaseLabel} echo PreReleaseNumber:${{steps.gitversion.outputs.PreReleaseNumber} echo WeightedPreReleaseNumber:${{steps.gitversion.outputs.WeightedPreReleaseNumber} echo BuildMetaData:${{steps.gitversion.outputs.BuildMetaData}} echo BuildMetaDataPadded:${{steps.gitversion.outputs.BuildMetaDataPadded} echo FullBuildMetaData:${{steps.gitversion.outputs.FullBuildMetaData}} echo MajorMinorPatch:${{steps.gitversion.outputs.MajorMinorPatch} echo SemVer:${{steps.gitversion.outputs.SemVer} echo LegacySemVer:${{steps.gitversion.outputs.LegacySemVer} echo LegacySemVerPadded:${{steps.gitversion.outputs.LegacySemVerPadded} echo AssemblySemVer:${{steps.gitversion.outputs.AssemblySemVer} echo AssemblySemFileVer:${{steps.gitversion.outputs.AssemblySemFileVer} echo InformationalVersion:${{steps.gitversion.outputs.InformationalVersion} echo BranchName:${{steps.gitversion.outputs.BranchName} echo Sha:${{steps.gitversion.outputs.Sha} echo ShortSha:${{steps.gitversion.outputs.ShortSha} echo NuGetVersionV2:${{steps.gitversion.outputs.NuGetVersionV2} echo NuGetVersion:${{steps.gitversion.outputs.NuGetVersion} echo NuGetPreReleaseTagV2:${{steps.gitversion.outputs.NuGetPreReleaseTagV2}} echo NuGetPreReleaseTag:${{steps.gitversion.outputs.NuGetPreReleaseTag}} echo VersionSourceSha:${{steps.gitversion.outputs.VersionSourceSha} echo CommitsSinceVersionSource:${{steps.gitversion.outputs.CommitsSinceVersionSource} echo CommitsSinceVersionSourceAdded:${{steps.gitversion.outputs.CommitsSinceVersionSourceAdded} echo CommitDate:${{steps.gitversion.outputs.CommitDate} 也许作为解决方法,您可以使用这些工具将它们组合到SemVer中:

      echo Major: ${{ steps.gitversion.outputs.major }}
      echo Minor: ${{ steps.gitversion.outputs.minor }}
      echo Patch: ${{ steps.gitversion.outputs.patch }}
看,我认为这可能是由你的名单发布引起的。你能核实一下吗?如果这是真的,请发布预期的架构版本,然后再次尝试运行您的构建。

不受欢迎,因此我建议您切换到,然后您可以像这样使用它:

步骤: -任务:gitversion/setup@0 已启用:true displayName:安装GitVersion 投入: 版本规范:“5.1.3” -任务:gitversion/execute@0 已启用:true displayName:“建立版本” -powershell:写入主机vso[build.updatebuildnumber]$FullSemVer displayName:“将内部版本号更新为$FullSemVer” 然后你可以试试

-任务:DotNetCoreCLI@2 显示名称:构建 投入: 项目:“$Parameters.RestoreBuildProjects” 参数:'-configuration$BuildConfiguration/p:Version=$FullSemVer 请检查这个

步骤: -任务:gitversion/setup@0 displayName:安装GitVersion 投入: 版本规范:“5.1.3” -任务:gitversion/execute@0 displayName:使用GitVersion -脚本:| echo FullSemVer:$FullSemVer echo vso[build.updatebuildnumber]$fullSemVer echo Major:${{steps.gitversion.outputs.Major} 次要回声:${steps.gitversion.outputs.Minor} 回显修补程序:${{steps.gitversion.outputs.Patch} echo PreReleaseTag:${{steps.gitversion.outputs.PreReleaseTag}} echo PreReleaseTagWithDash:${{steps.gitversion.outputs.PreReleaseTagWithDash} echo PreReleaseLabel:${{steps.gitversion.outputs.PreReleaseLabel} echo PreReleaseNumber:${{steps.gitversion.outputs.PreReleaseNumber} echo WeightedPreReleaseNumber:${{steps.gitversion.outputs.WeightedPreReleaseNumber} echo BuildMetaData:${{steps.gitversion.outputs.BuildMetaData}} echo BuildMetaDataPadded:${{steps.gitversion.outputs.BuildMetaDataPadded} echo FullBuildMetaData:${{steps.gitversion.outputs.FullBuildMetaData}} echo MajorMinorPatch:${{steps.gitversion.outputs.MajorMinorPatch} echo SemVer:${{steps.gitversion.outputs.SemVer} echo LegacySemVer:${{steps.gitversion.outputs.LegacySemVer} echo LegacySemVerPadded:${{steps.gitversion.outputs.LegacySemVerPadded} echo AssemblySemVer:${{steps.gitversion.outputs.AssemblySemVer} echo AssemblySemFileVer:${{steps.gitversion.outputs.AssemblySemFileVer} echo InformationalVersion:${{steps.gitversion.outputs.InformationalVersion} echo BranchName:${{steps.gitversion.outputs.BranchName} echo Sha:${{steps.gitversion.outputs.Sha} echo ShortSha:${{steps.gitversion.outputs.ShortSha} echo NuGetVersionV2:${{steps.gitversion.outputs.NuGetVersionV2} echo NuGetVersion:${{steps.gitversion.outputs.NuGetVersion} echo NuGetPreReleaseTagV2:${{steps.gitversion.outputs.NuGetPreReleaseTagV2}} echo NuGetPreReleaseTag:${{steps.gitversion.outputs.NuGetPreReleaseTag}} echo VersionSourceSha:${{steps.gitversion.outputs.VersionSourceSha} echo CommitsSinceVersionSource:${{steps.gitversion.outputs.CommitsSinceVersionSource} echo CommitsSinceVersionSourceAdded:${{steps.gitversion.outputs.CommitsSinceVersionSourceAdded} echo CommitDate:${{steps.gitversion.outputs.CommitDate} 也许作为解决方法,您可以使用这些工具将它们组合到SemVer中:

      echo Major: ${{ steps.gitversion.outputs.major }}
      echo Minor: ${{ steps.gitversion.outputs.minor }}
      echo Patch: ${{ steps.gitversion.outputs.patch }}
看,我认为这可能是由你的名单发布引起的。你能核实一下吗?如果这是真的,请与我发布预期的架构版本,然后再次尝试运行您的构建。

感谢Krzysztof Madej对此的帮助

事实证明,Git的问题在于它不会自动删除本地回购中的标记。这个问题并不是一个真正的bug——不删减本地标记有很好的理由

因此,当使用我们的自托管构建服务器时,旧标记yyyymmdd.1.1甚至在我删除了服务器上的那些标记之后,仍然挂在先前构建的代理上。因为yyyymmdd大于我想要的semver-major,所以使用了它。在下游,构建抱怨主版本无效

如果您使用的是MS托管代理,那么每次都会得到一个干净的git repo,这样就不会有旧标记,也不会有问题

如果使用自托管代理,解决方法-在管道源上设置clean选项

对于本地版本,发布git fetch-origin-prune-prune标记未经测试,但我从中得到了线索。

感谢Krzysztof Madej的帮助

事实证明,Git的问题在于它不会自动删除本地回购中的标记。这个问题并不是一个真正的bug——不删减本地标记有很好的理由

因此,当使用我们的自托管构建服务器时,旧标记yyyymmdd.1.1甚至在我删除了服务器上的那些标记之后,仍然挂在先前构建的代理上。因为yyyymmdd大于我想要的semver-major,所以使用了它。在下游,构建抱怨主版本无效

如果您使用的是MS托管代理,那么每次都会得到一个干净的git repo,这样就不会有旧标记,也不会有问题

如果使用自托管代理,解决方法-在管道源上设置clean选项


对于本地版本,发布git fetch origin-prune-prune标记未经测试,但我从中得到了线索。

谢谢。使用更新的软件包很好。它仍在设置日期,例如FullSemVer:20200619.1.1+1,。问题可能是,在我开始使用GitVersion之前,较早的签入/提交或在master上构建以某种方式标记了日期,并覆盖了下一个版本设置。您能否添加-script:env |在更新后对构建编号进行排序,并与我们共享结果,以查看其他值是如何设置的?或者,如果您使用以下命令,可能会更好:要显示VariablesHanks,请参阅编辑/更新1以获取建立版本任务的输出。我记得我第一次
尝试了这个,我必须签入3或4个带标签的版本,然后GitVersion会忘记计算中的旧提交。希望这能提供一些线索。那么git中的标签呢。你能展示一下你的git标签吗?好的,通过一个幸运的猜测修正了它。看起来本地回购中没有删除旧标签。修复方法是在管道的“获取源代码”部分中执行清理/全部构建目录。线索是在看我的本地机器-它也没有删除旧标签。感谢您在上面的帮助-使用新的捆绑包和调试已经有所帮助。谢谢。使用更新的软件包很好。它仍在设置日期,例如FullSemVer:20200619.1.1+1,。问题可能是,在我开始使用GitVersion之前,较早的签入/提交或在master上构建以某种方式标记了日期,并覆盖了下一个版本设置。您能否添加-script:env |在更新后对构建编号进行排序,并与我们共享结果,以查看其他值是如何设置的?或者,如果您使用以下命令,可能会更好:要显示VariablesHanks,请参阅编辑/更新1以获取建立版本任务的输出。我记得在我第一次尝试这个方法时,我必须签入3或4个带标记的版本,然后GitVersion会忘记计算中的旧提交。希望这能提供一些线索。那么git中的标签呢。你能展示一下你的git标签吗?好的,通过一个幸运的猜测修正了它。看起来本地回购中没有删除旧标签。修复方法是在管道的“获取源代码”部分中执行清理/全部构建目录。线索是在看我的本地机器-它也没有删除旧标签。感谢您在上面的帮助-使用新的捆绑包和调试已经有所帮助。
      echo Major: ${{ steps.gitversion.outputs.major }}
      echo Minor: ${{ steps.gitversion.outputs.minor }}
      echo Patch: ${{ steps.gitversion.outputs.patch }}