【发布时间】:2018-05-24 21:38:24
【问题描述】:
我们正在寻找如何将 GitHubFlow 与 NuGet 包一起使用以及在 Visual Studio Team Services 上自动创建 NuGet 包的最佳实践。
但是如何自动定义 Major.Minor.Release 呢? 我们不想在 *.csproj 或存储库中使用这些变量,因为这不适用于拉取请求。
这里目前的最佳做法是什么?
【问题讨论】:
标签: nuget .net-core azure-devops
我们正在寻找如何将 GitHubFlow 与 NuGet 包一起使用以及在 Visual Studio Team Services 上自动创建 NuGet 包的最佳实践。
但是如何自动定义 Major.Minor.Release 呢? 我们不想在 *.csproj 或存储库中使用这些变量,因为这不适用于拉取请求。
这里目前的最佳做法是什么?
【问题讨论】:
标签: nuget .net-core azure-devops
您可以在 Azure DevOps(以前的 VSTS)中的单个管道中完成所有这些操作。如果您使用的是 git 存储库,我强烈建议使用 GitVersion 自动确定下一个版本号。您可以在此处将其添加为构建任务:https://marketplace.visualstudio.com/items?itemName=gittools.gitversion
在你的仓库中,我建议你将 GitVersion 配置为在这个仓库的“主线”模式下运行,这样每次提交时,你的版本会自动增加 +1,例如1.0.1、1.0.2、1.0.3。不过,您始终可以将您的提交标记为特定的修订版。要设置 Mainline 模式,只需在存储库“GitVersion.yml”的根目录中拖放一个文件,内容为“mode: Mainline”。这仅适用于 GitVersion v4.0+
回到 Azure DevOps Pipeline,在解决方案生成之后、nuget pack 命令之前运行 GitVersion 任务。 GitVersion 任务运行后,您将可以访问它创建的变量,您可以在 nuget 包选项中使用这些变量。
在 Nuget“Pack Options”下,将 Automatic package versioning 设置为“Use an environment variable”,然后使用变量“GitVersion_NuGetVersion”
GitVersion 开箱即用非常好,特别是对于 GitFlow 和 GitHub Flow,但您可能需要阅读文档。 http://gitversion.readthedocs.io/en/latest/
您将在下面找到一个执行整个管道流程的示例 YAML 文件。除了从 GitVersion 获取版本号和配置要推送到的 nuget 服务器之外,大多数都是开箱即用的。
pool:
name: Default
demands:
- msbuild
- visualstudio
- vstest
steps:
- task: gittools.gitversion.gitversion-task.GitVersion@4
displayName: GitVersion
inputs:
updateAssemblyInfo: true
- task: NuGetToolInstaller@0
displayName: 'Use NuGet 4.3.0'
- task: NuGetCommand@2
displayName: 'NuGet restore'
inputs:
restoreSolution: '$(Parameters.solution)'
- task: VSBuild@1
displayName: 'Build solution **\*.sln'
inputs:
solution: '$(Parameters.solution)'
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
- task: VSTest@2
displayName: 'VsTest - testAssemblies'
inputs:
testAssemblyVer2: |
**\$(BuildConfiguration)\*test*.dll
!**\obj\**
platform: '$(BuildPlatform)'
configuration: '$(BuildConfiguration)'
- task: NuGetCommand@2
displayName: 'NuGet pack'
inputs:
command: pack
versioningScheme: byEnvVar
versionEnvVar: 'GitVersion_NuGetVersion'
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
packagesToPush: '$(Build.ArtifactStagingDirectory)/*.nupkg'
nuGetFeedType: external
publishFeedCredentials: 'Your NuGet Server'
【讨论】: