【问题标题】:Version (VersionPrefix) not being updated by AzureDev Ops CI buildAzureDev Ops CI 版本未更新版本 (VersionPrefix)
【发布时间】:2020-01-08 18:17:17
【问题描述】:

我有一个 Azure DevOps 管道,其中包含本地 nuget 包到本地工件存储库,然后推送到 nuget.org。

但是它没有更新版本,并且在本地 azure DevOps 项目工件中保持在1.0.0-{build_ver}(而版本卡在包的 build_ver 按预期递增),但是当它尝试推送到 nutget 时,它会因为相同的 1.0.0 版本而失败,并忽略项目文件中的 1.0.1

请指点 - 我如何获得构建中使用的 csproj 中定义的版本?

我有以下构建 yaml:

trigger:
- master

stages:

- stage: 'Build'
  variables:
    buildConfiguration: 'Release'

  jobs:
  - job:
    pool:
      vmImage: 'ubuntu-latest'

    workspace:
      clean: all

    steps:
    - task: UseDotNet@2
      displayName: 'Use .NET Core sdk'
      inputs:
        packageType: sdk
        version: 2.2.x
        installationPath: $(Agent.ToolsDirectory)/dotnet

    - task: DotNetCoreCLI@2
      displayName: "NuGet Restore"
      inputs:
        command: restore
        projects: '**/*.csproj'

    - task: DotNetCoreCLI@2
      displayName: "Build Solution"
      inputs:
        command: build
        projects: '**/*.csproj'
        arguments: '--configuration $(buildConfiguration)'
    - task: DotNetCoreCLI@2
      displayName: "Test Solution"
      inputs:
        command: test
        projects: '**/*Test/*.csproj'
        arguments: '--configuration $(buildConfiguration)'
    - task: DotNetCoreCLI@2
      displayName: 'Create NuGet Package - Release Version'
      inputs:
        command: pack
        packDirectory: '$(Build.ArtifactStagingDirectory)/packages/releases'
        arguments: '--configuration $(buildConfiguration)'
        nobuild: true

    - task: DotNetCoreCLI@2
      displayName: 'Create NuGet Package - Prerelease Version'
      inputs:
        command: pack
        buildProperties: 'VersionSuffix="$(Build.BuildNumber)"'
        packDirectory: '$(Build.ArtifactStagingDirectory)/packages/prereleases'
        arguments: '--configuration $(buildConfiguration)'

    - publish: '$(Build.ArtifactStagingDirectory)/packages'
      artifact: 'packages'



- stage: 'PublishPrereleaseNuGetPackage'
  displayName: 'Publish Prerelease NuGet Package'
  dependsOn: 'Build'
  condition: succeeded()
  jobs:
  - job:
    pool:
      vmImage: 'ubuntu-latest'

    steps:
    - checkout: none

    - download: current
      artifact: 'packages'

    - task: NuGetCommand@2
      displayName: 'Push NuGet Package'
      inputs:
        command: 'push'
        packagesToPush: '$(Pipeline.Workspace)/packages/prereleases/*.nupkg'
        nuGetFeedType: 'internal'
        publishVstsFeed: 'Unified.Mqtt.Pattern/Unified.Mqtt.Pattern-Test'



- stage: 'PublishReleaseNuGetPackage'
  displayName: 'Publish Release NuGet Package'
  dependsOn: 'PublishPrereleaseNuGetPackage'
  condition: succeeded()
  jobs:
  - deployment:
    pool:
      vmImage: 'ubuntu-latest'
    environment: 'nuget-org'
    strategy:
     runOnce:
       deploy:
         steps:
         - task: NuGetCommand@2
           displayName: 'Push NuGet Package'
           inputs:
             command: 'push'
             packagesToPush: '$(Pipeline.Workspace)/packages/releases/*.nupkg'
             nuGetFeedType: 'external'
             publishFeedCredentials: 'NuGet Unified.Mqtt.Pattern'

我的csproj 有以下内容:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <Authors>Christopher Morley</Authors>
    <Company>Unified Microsystems</Company>
    <Copyright />
    <PackageId>Unified.Mqtt.Pattern</PackageId>
    <Description>C# port of RangerMauve's mqtt-pattern fast library for matching MQTT patterns with named wildcards to extract data from topics.</Description>
    <RepositoryUrl>https://github.com/unifiedmicrosystems/Unified.Mqtt.Pattern</RepositoryUrl>
    <PackageProjectUrl>https://github.com/unifiedmicrosystems/Unified.Mqtt.Pattern</PackageProjectUrl>
    <RepositoryType>github.com</RepositoryType>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <GenerateDocumentationFile>true</GenerateDocumentationFile>
    <PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
    <PackageIconUrl>https://www.unifiedmicro.systems/resources/unified-logo.png</PackageIconUrl>
    <PackageLicenseFile>LICENSE</PackageLicenseFile>
  </PropertyGroup>

  <ItemGroup>
    <None Include="..\..\LICENSE">
      <Pack>True</Pack>
      <PackagePath></PackagePath>
      <VersionPrefix>1.0.1</VersionPrefix>
    </None>
  </ItemGroup>    
</Project>

【问题讨论】:

    标签: azure-devops continuous-integration azure-pipelines


    【解决方案1】:

    AzureDev Ops CI build 未更新版本(VersionPrefix)

    如果你想用$(Build.BuildNumber)更新nuget包版本,任务.NET Core pack有一个Pack选项(用经典编辑器显示),你可以使用Build.BuildNumber

    所以,我们可以在 yaml 中使用这个参数,比如:

    - task: DotNetCoreCLI@2
      displayName: 'dotnet pack'
      inputs:
        command: pack
        packDirectory: '$(Build.ArtifactStagingDirectory)/packages/prereleases'
        versioningScheme: byBuildNumber
    

    然后,我们可以得到带有版本的nuget包:

    注意:我看到你的 yaml 文件中有两个 dotnet pack 任务,你应该仔细检查是否需要。

    更新:

    我收到错误找不到以下版本号数据 环境变量:BUILD_BUILDNUMBER。我在哪里设置这个?如果什么 我不想要约会,只想要 1.0.1?

    对于Build.BuildNumber,我们可以在经典编辑器中设置选项选项卡:

    对于 YAML,您可以在 yaml 文件顶部设置以下内容来实现:

    name: 1.0.$(Rev:r)
    

    我们可以使用变量来替换硬编码1.0,比如$(Major).$(Minor).$(Rev:r)

    所以,你可以检查一下我的 YAML 的派对:

    name: $(Major).$(Minor).$(Rev:r)
    
    variables:
      Major: 1
      Minor: 0
    
    
    pool:
      vmImage: 'vs2017-win2016'
    

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复,我收到错误Could not find version number data in the following environment variable: BUILD_BUILDNUMBER。我在哪里设置这个?如果我不想约会,只想要 1.0.1 怎么办?非常感谢。
    • @g18c,对不起,我刚刚看到你的回复。我已经更新了我的答案,你可以看看它是否对你有帮助。
    • 感谢 Leo,是的,效果很好。您知道如何设置 Major 和 Minor 以及 Build 版本,以便它们来自 csproj 文件本身吗?
    • @g18c,我们可以在 csproj 文件中设置 Build 版本,但是这样我们无法完成自动包版本增量。由于我们无法在项目文件中使用$(Rev:r),它属于Azure devops,因此我们必须在打包时手动覆盖包版本:/p:PackageVersion=1.2.3。查看此文档以获取更多详细信息:andrewlock.net/…
    • 嗨,Leo,感谢您的跟进。我已经更新了问题,不确定您是否看到Any pointers please - how can i get the version defined in the csproj used in the build?,换句话说,我如何从scproj 中提取&lt;VersionPrefix&gt;1.0.1&lt;/VersionPrefix&gt; 并在MajorMinor 变量等中使用它?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多