首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在devops构建中使用日期作为主要版本的Gitversion

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

Stack Overflow用户
提问于 2020-10-21 20:21:21
回答 2查看 2.1K关注 0票数 2

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

我已经删除了所有旧的构建标签从回购,所以它似乎没有找到这从标签。还有其他地方可以强制它忽略以前的构建版本并使用从gitversion.yml/next版本设置开始的义量器吗?

详情如下:

gitversion.yml很简单:

代码语言:javascript
复制
assembly-versioning-scheme: MajorMinorPatchTag
mode: Mainline 
next-version: 0.1.3 
increment: Inherit
branches:
 feature:
   tag: alpha
 master:
   tag: 
ignore:
 sha: []

DevOps构建任务具有

Gitversion

代码语言:javascript
复制
steps:
- task: gittools.usegitversion.gitversion-task.UseGitVersion@5
  displayName: GitVersion
  inputs:
    versionSpec: 5.x

构建

代码语言:javascript
复制
steps:
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    projects: '$(Parameters.RestoreBuildProjects)'
    arguments: '--configuration $(BuildConfiguration) /p:Version=$(GitVersion.SemVer) 

gitversion任务的输出如下:

代码语言:javascript
复制
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

在构建中出现错误,如

代码语言:javascript
复制
....AssemblyInfo.cs(19,55): Error CS7034: The specified version string does not conform to the required format - major[.minor[.build[.revision]]]

更新1

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

代码语言:javascript
复制
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"
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-21 23:37:55

感谢Krzysztof Madej在这方面的帮助。

结果发现,Git的“问题”在于它不会自动在本地repos中剪枝标记。(“问题”并不是一个真正的bug -不修剪本地标记是有充分理由的)。

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

如果您使用的是MS托管代理,则每次都会得到一个干净的git,这样就没有旧标签,也没有问题。

如果使用自托管代理,则在管道源上设置clean选项。

对于本地构建,发出一个"git获取源-修剪-标记“(没有测试,但我从这个职位获得了一个线索)。

票数 2
EN

Stack Overflow用户

发布于 2020-10-21 20:33:54

因此,我建议您切换到GitTools.UseGitVersion,然后您可以这样使用它:

代码语言:javascript
复制
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)'

然后你可以试试

代码语言:javascript
复制
- task: DotNetCoreCLI@2
  displayName: Build
  inputs:
    projects: '$(Parameters.RestoreBuildProjects)'
    arguments: '--configuration $(BuildConfiguration) /p:Version=$(FullSemVer) 

请检查一下这个链接

代码语言:javascript
复制
  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中:

代码语言:javascript
复制
      echo Major: ${{ steps.gitversion.outputs.major }}
      echo Minor: ${{ steps.gitversion.outputs.minor }}
      echo Patch: ${{ steps.gitversion.outputs.patch }}

看一看这里,我认为它可能是由您的列表发布引起的。你能核实一下吗?如果这是真的,请与我一起发布一个预期的模式版本,然后再试着运行您的构建。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64471205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档