我能够让这个工作为发布流程的一部分做一个反模式。但是,如果您使用 Azure DevOps,这没什么大不了的,因为 Microsoft 提供了一种快速简便的方法来查看您的发布分支是否在主分支之前/之后。我已经对此进行了测试,并且除了在每个 sprint 结束时创建发布分支和新标签之外,我还使用 Release Flow 几乎完全自动化了版本控制。这种方法也适用于我的 Nuget 包的语义版本控制 2.0,我使用视图而不是后缀标签。
修改后的发布流程
我很抱歉,希望现在帮助别人还为时不晚。我已经添加了 yml,并且我还制作了一个 powershell,用于在从 master 挑选 HF 时处理发布分支命名。请注意,此 powershell 步骤会在发布分支上添加版本标记,以便 GitVersion 将其拾取。
Powershell:使用您的团队项目和存储库名称发布 {{TeamProject}}/{{RepoName}}
- powershell: |
$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=2.0"
Write-Host "URL:" $url
$definition = Invoke-RestMethod -Uri $url -Headers @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" }
Write-Host "Pipeline = $($definition | ConvertTo-Json -Depth 100)"
displayName: Build Details
env:
SYSTEM_ACCESSTOKEN: $(system.accesstoken)
- powershell: |
#Get branch version and increment from release branch
$branchName = "$env:BUILD_SOURCEBRANCHNAME"
$versionNotIncremented = ($branchName -Split "-")[1]
[System.Version] $version = "0.0"
[System.Version]::TryParse($versionNotIncremented, [ref]$version) > Null
$ver = New-Object System.Version($version.Major,($version.Minor + 1))
#Create new commit and tag on master
git checkout master
$env:GIT_TRACE=1
git pull
git commit --allow-empty -m "Create Tag ***NO_CI***"
git push https://$env:SYSTEM_ACCESSTOKEN@dev.azure.com/{{TeamProject}}/{{RepoName}}/_git/{{TeamProject}}.Lookup.Api
$commitId = git log --format="%h" -n 1
#$commitId = git rev-parse --short HEAD
git tag $ver $commitId -f -m "Release-$ver"
git push https://$env:SYSTEM_ACCESSTOKEN@dev.azure.com/{{TeamProject}}/{{RepoName}}/_git/{{TeamProject}}.Lookup.Api $ver -f --porcelain
displayName: 'Update Version for Upcoming Release'
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/heads/releases/'))
env:
SYSTEM_ACCESSTOKEN: $(system.accesstoken)
GitVersion Yaml:
assembly-informational-format: '{FullSemVer}'
mode: Mainline
branches:
master:
tag: ''
increment: Patch
prevent-increment-of-merged-branch-version: true
track-merge-target: false
regex: master|releases?[/-]
tracks-release-branches: false
is-release-branch: false
feature:
mode: ContinuousDelivery
tag: useBranchName
increment: Inherit
prevent-increment-of-merged-branch-version: false
track-merge-target: false
regex: features?[/-]
tracks-release-branches: false
is-release-branch: false
pull-request:
mode: ContinuousDelivery
tag: PullRequest
increment: None
prevent-increment-of-merged-branch-version: false
tag-number-pattern: '[/-](?<number>\d+)[-/]'
track-merge-target: false
regex: (pull|pull\-requests|pr|[0-9]+)[/-]
tracks-release-branches: false
is-release-branch: false
hotfix:
mode: ContinuousDelivery
tag: beta
increment: Patch
prevent-increment-of-merged-branch-version: false
track-merge-target: false
regex: hotfix(es)?[/-]
tracks-release-branches: false
is-release-branch: false
develop:
mode: ContinuousDeployment
tag: unstable
increment: Patch
prevent-increment-of-merged-branch-version: false
track-merge-target: true
regex: dev(elop)?(ment)?$
tracks-release-branches: true
is-release-branch: false
ignore:
sha: []