Версия (VersionPrefix) не обновляется сборкой CI AzureDev Ops - PullRequest
3 голосов
/ 08 января 2020

У меня есть Azure конвейер DevOps с локальным пакетом nuget для локального репозитория артефактов, а затем pu sh на nuget.org.

Однако он не обновляет версию и остается в 1.0.0-{build_ver} в локальных azure артефактах проекта DevOps (в то время как версия застряла, build_ver пакета увеличивается, как и ожидалось), но когда он пытается сделать pu sh, чтобы запутаться, происходит сбой, как в той же версии 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'

My 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>

1 Ответ

2 голосов
/ 10 января 2020

Версия (VersionPrefix) не обновляется сборкой CI AzureDev Ops

Если вы хотите обновить версию пакета nuget с помощью $(Build.BuildNumber), в задаче есть параметры пакета * Задание 1006 * (показать его с помощью редактора classi c), которое вы можете использовать Build.BuildNumber:

enter image description here

Итак, мы могли бы использовать это аргумент в yaml, например:

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

Затем мы можем получить пакет nuget с версией:

enter image description here

Примечание : Я видел, что в вашем файле yaml есть две задачи do tnet pack, вы должны дважды проверить, если это необходимо.

Обновление:

я получаю ошибка Не удалось найти данные номера версии в следующей переменной среды: BUILD_BUILDNUMBER. Где я могу установить это? Что, если я не хочу дату и просто хочу 1.0.1?

Для Build.BuildNumber, мы могли бы установить его вкладку Options в classi c editor :

enter image description here

Для 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'

Надеюсь, это поможет.

...