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