【问题标题】:NuGet automatic versioning with VSTS使用 VSTS 进行 NuGet 自动版本控制
【发布时间】:2018-05-24 21:38:24
【问题描述】:

我们正在寻找如何将 GitHubFlow 与 NuGet 包一起使用以及在 Visual Studio Team Services 上自动创建 NuGet 包的最佳实践。

我们已经使用了 VSTS“dotnet pack”命令

但是如何自动定义 Major.Minor.Release 呢? 我们不想在 *.csproj 或存储库中使用这些变量,因为这不适用于拉取请求。

这里目前的最佳做法是什么?

【问题讨论】:

    标签: nuget .net-core azure-devops


    【解决方案1】:

    您可以在 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      相关资源
      最近更新 更多