Gitversion 在 devops 构建中使用日期作为主要版本
Gitversion using date as major version in devops build
我有几个要添加 gitversion 的网络应用程序。主要问题 - GitVersion 正在生成 MajorMinorPatchTag,其中 Major 的格式为 yyyymmdd。除了这不是一个有效的主要版本之外,我希望在下面的示例中使用通常的版本控制 0.1.3.alpha.1,但我得到的是 20201021.1.1.
我已经从 repo 中删除了所有旧的构建标签,所以它似乎没有从标签中找到它。有没有其他地方我可以强制它忽略以前的构建版本并使用从 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
steps:
- task: gittools.usegitversion.gitversion-task.UseGitVersion@5
displayName: GitVersion
inputs:
versionSpec: 5.x
建造
steps:
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: '$(Parameters.RestoreBuildProjects)'
arguments: '--configuration $(BuildConfiguration) /p:Version=$(GitVersion.SemVer)
'
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.3.7\x64
C:\DevOps\_work\_tool\GitVersion.Tool.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\s\
INFO [10/21/20 20:51:49:57] DotGit directory is: C:\DevOps\_work\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\s\.git\gitversion_cacheEC1078831A476936644C50EA5AB6347D5E7CD7.yml
INFO [10/21/20 20:51:49:73] End: Deserializing version variables from cache file C:\DevOps\_work\s\.git\gitversion_cacheEC1078831A476936644C50EA5AB6347D5E7CD7.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.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"
}
GitTools.UseGitVersion is deprected thus I recommend you switch to GitTools bundle 然后你可以这样使用它:
steps:
- task: gitversion/setup@0
enabled: true
displayName: Install GitVersion
inputs:
versionSpec: '5.1.3'
- task: gitversion/execute@0
enabled: true
displayName: 'Establish Version'
- powershell: Write-Host "##vso[build.updatebuildnumber]$(FullSemVer)"
displayName: 'Update build number to $(FullSemVer)'
然后你可以试试
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: '$(Parameters.RestoreBuildProjects)'
arguments: '--configuration $(BuildConfiguration) /p:Version=$(FullSemVer)
请检查这个link
steps:
- task: gitversion/setup@0
displayName: Install GitVersion
inputs:
versionSpec: '5.1.3'
- task: gitversion/execute@0
displayName: Use GitVersion
- script: |
echo FullSemVer: $(fullSemVer)
echo ##vso[build.updatebuildnumber]$(fullSemVer)
echo Major: ${{ steps.gitversion.outputs.major }}
echo Minor: ${{ steps.gitversion.outputs.minor }}
echo Patch: ${{ 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 CommitsSinceVersionSourcePadded: ${{ steps.gitversion.outputs.commitsSinceVersionSourcePadded }}
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 }}
正在查看here我想可能是你发布的列表导致的。你能验证一下吗?如果这是真的,请发布一个符合我预期的架构版本控制的版本,然后重试 运行 你的构建。
感谢 Krzysztof Madej 对此提供的帮助。
原来“问题”出在 Git 上,因为它不会自动修剪本地存储库中的标签。 (“问题”并不是真正的错误 - 有充分的理由不修剪本地标签)。
因此,当使用我们的自托管构建服务器时,旧标签 (yyyymmdd.1.1) 仍然存在于先前构建的代理上,即使我在服务器上删除了这些标签。因为yyyymmdd大于我想要的semver major,所以改用了。下游,构建抱怨无效的主要版本。
如果您正在使用 MS 托管代理,您每次都会得到一个干净的 git 存储库,因此没有旧标签,没有问题。
如果使用 self-hosted 代理,解决方法 - 在管道源上设置清理选项。
对于本地构建,发出“git fetch origin --prune --prune-tags”(未测试,但我从 this post 那里得到了线索)
我有几个要添加 gitversion 的网络应用程序。主要问题 - GitVersion 正在生成 MajorMinorPatchTag,其中 Major 的格式为 yyyymmdd。除了这不是一个有效的主要版本之外,我希望在下面的示例中使用通常的版本控制 0.1.3.alpha.1,但我得到的是 20201021.1.1.
我已经从 repo 中删除了所有旧的构建标签,所以它似乎没有从标签中找到它。有没有其他地方我可以强制它忽略以前的构建版本并使用从 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
steps:
- task: gittools.usegitversion.gitversion-task.UseGitVersion@5
displayName: GitVersion
inputs:
versionSpec: 5.x
建造
steps:
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: '$(Parameters.RestoreBuildProjects)'
arguments: '--configuration $(BuildConfiguration) /p:Version=$(GitVersion.SemVer)
'
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.3.7\x64
C:\DevOps\_work\_tool\GitVersion.Tool.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\s\
INFO [10/21/20 20:51:49:57] DotGit directory is: C:\DevOps\_work\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\s\.git\gitversion_cacheEC1078831A476936644C50EA5AB6347D5E7CD7.yml
INFO [10/21/20 20:51:49:73] End: Deserializing version variables from cache file C:\DevOps\_work\s\.git\gitversion_cacheEC1078831A476936644C50EA5AB6347D5E7CD7.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.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"
}
GitTools.UseGitVersion is deprected thus I recommend you switch to GitTools bundle 然后你可以这样使用它:
steps:
- task: gitversion/setup@0
enabled: true
displayName: Install GitVersion
inputs:
versionSpec: '5.1.3'
- task: gitversion/execute@0
enabled: true
displayName: 'Establish Version'
- powershell: Write-Host "##vso[build.updatebuildnumber]$(FullSemVer)"
displayName: 'Update build number to $(FullSemVer)'
然后你可以试试
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: '$(Parameters.RestoreBuildProjects)'
arguments: '--configuration $(BuildConfiguration) /p:Version=$(FullSemVer)
请检查这个link
steps:
- task: gitversion/setup@0
displayName: Install GitVersion
inputs:
versionSpec: '5.1.3'
- task: gitversion/execute@0
displayName: Use GitVersion
- script: |
echo FullSemVer: $(fullSemVer)
echo ##vso[build.updatebuildnumber]$(fullSemVer)
echo Major: ${{ steps.gitversion.outputs.major }}
echo Minor: ${{ steps.gitversion.outputs.minor }}
echo Patch: ${{ 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 CommitsSinceVersionSourcePadded: ${{ steps.gitversion.outputs.commitsSinceVersionSourcePadded }}
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 }}
正在查看here我想可能是你发布的列表导致的。你能验证一下吗?如果这是真的,请发布一个符合我预期的架构版本控制的版本,然后重试 运行 你的构建。
感谢 Krzysztof Madej 对此提供的帮助。
原来“问题”出在 Git 上,因为它不会自动修剪本地存储库中的标签。 (“问题”并不是真正的错误 - 有充分的理由不修剪本地标签)。
因此,当使用我们的自托管构建服务器时,旧标签 (yyyymmdd.1.1) 仍然存在于先前构建的代理上,即使我在服务器上删除了这些标签。因为yyyymmdd大于我想要的semver major,所以改用了。下游,构建抱怨无效的主要版本。
如果您正在使用 MS 托管代理,您每次都会得到一个干净的 git 存储库,因此没有旧标签,没有问题。
如果使用 self-hosted 代理,解决方法 - 在管道源上设置清理选项。
对于本地构建,发出“git fetch origin --prune --prune-tags”(未测试,但我从 this post 那里得到了线索)