Publicar pacotes NuGet com o Azure Pipelines (YAML/Clássico)

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

No Azure Pipelines, você pode usar o editor clássico ou as tarefas YAML para publicar seus pacotes NuGet em seu pipeline, no feed de Artefatos do Azure ou em registros públicos, como nuget.org.

Criar um pacote NuGet

Há várias maneiras de criar seus pacotes NuGet, como usar o Visual Studio para empacotar seus pacotes NuGet. Se você já estiver usando o MSBuild ou alguma outra tarefa para criar seus pacotes, ignore esta seção e vá para a seção publicar pacotes .

Para criar um pacote NuGet, adicione o snippet a seguir ao arquivo YAML do pipeline. Consulte a tarefa NuGet para obter mais detalhes.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: padrão para pesquisar diretórios csproj para empacotar
  • packDestination: diretório onde os pacotes serão criados

Não há suporte para YAML no TFS.

Controle de versão do pacote

Os pacotes NuGet são identificados por seus nomes e números de versão. Uma abordagem recomendada para o controle de versão dos pacotes é usar o Controle de Versão Semântico. As versões semânticas têm três componentes numéricos: Major, Minor e Patch.

O patch geralmente é incrementado após a correção de um bug (por exemplo , 1.0.0 ->1.0.1). Quando você lança um novo recurso compatível com versões anteriores, incrementa a versão secundária e redefine a versão do patch para 0 (por exemplo , 1.4.17 ->1.5.0). Quando você faz uma alteração incompatível com versões anteriores, incrementa a versão principal e redefine as versões secundária e de patch para 0 (por exemplo , 2.6.5 ->3.0.0).

Com o Controle de Versão Semântico, você também pode usar rótulos de pré-lançamento para marcar seus pacotes. Para usar rótulos de pré-lançamento, insira um hífen seguido de qualquer letra(s) ou número(s) que você escolher: por exemplo, 1.0.0-beta.

O Controle de Versão Semântica tem suporte no Azure Pipelines e pode ser configurado em sua tarefa NuGet:

  • Use o mesmo esquema de controle de versão para seus builds e pacotes:

    • $(Major).$(Minor).$(rev:.r), onde Major e Minor são duas variáveis definidas em seu pipeline. Esse formato incrementará automaticamente o número de build e a versão do pacote com um novo número de patch. Ele manterá a constante de versões principais e secundárias, até que você as altere manualmente.
    • $(Major).$(Minor).$(Patch).$(date:yyyyMMdd), onde Major, Minore Patch são variáveis definidas em seu pipeline. Esse formato criará um novo rótulo de pré-lançamento para o build e o pacote, mantendo as versões principais, secundárias e de patch constantes.
  • Use um esquema de controle de versão personalizado. Você pode personalizar as versões principais, secundárias e de patch para seus pacotes e permitir que a tarefa NuGet gere um rótulo de pré-lançamento exclusivo com base na data e hora.

  • Use um script no pipeline de build para gerar a versão.

Este exemplo mostra como usar a data e a hora como o rótulo de pré-lançamento.

variables:
  Major: '1'
  Minor: '0'
  Patch: '0'

steps:
- task: NuGetCommand@2
  inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

Não há suporte para YAML no TFS.

Observação

DotNetCore e DotNetStandard pacotes devem ser empacotados com a DotNetCoreCLI@2 tarefa para evitar System.InvalidCastExceptions. Consulte a tarefa da CLI do .NET Core para obter mais detalhes.

task: DotNetCoreCLI@2
inputs:
    command: pack
    versioningScheme: byPrereleaseNumber
    majorVersion: '$(Major)'
    minorVersion: '$(Minor)'
    patchVersion: '$(Patch)'

Publicar um pacote

Para publicar pacotes em um feed de Artefatos do Azure do pipeline, você deve definir a identidade do Serviço de Build do Project Collection para ser um Colaborador no feed. Consulte Definir configurações do feed para obter mais detalhes.

steps:
- task: NuGetAuthenticate@0
  displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    publishVstsFeed: '<projectName>/<feed>'
    allowPackageConflicts: true

Para publicar um pacote em um feed nuget externo, primeiro você deve criar uma conexão de serviço para se conectar a esse feed. Você pode fazer isso acessando asconexões> de serviço de configurações> do ProjetoNova conexão de serviço. Selecione NuGet e selecione Avançar. Preencha o formulário e selecione Salvar quando terminar. Consulte Gerenciar conexões de serviço para obter mais detalhes.

Para publicar um pacote em um feed nuget externo, adicione o snippet a seguir ao pipeline yaml.

- task: NuGetAuthenticate@0
  inputs:
    nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>
- task: NuGetCommand@2
  inputs:
    command: push
    nuGetFeedType: external
    versioningScheme: byEnvVar
    versionEnvVar: <VERSION_ENVIRONMENT_VARIABLE>

Exemplo usando atarefa linha de comando (NuGet.exe):

  - task: NuGetAuthenticate@1
    inputs:
      nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>

  - script: |
      nuget push <PACKAGE_PATH> -src https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json -ApiKey <ANY_STRING>
    displayName: "Push"          

Exemplo usando atarefa de linha de comando (dotnet):

  - task: NuGetAuthenticate@1
    inputs:
      nuGetServiceConnections: <NAME_OF_YOUR_SERVICE_CONNECTION>

  - script: |
      dotnet build <CSPROJ_PATH> --configuration <CONFIGURATION>
      dotnet pack <CSPROJ_PATH> -p:PackageVersion=<YOUR_PACKAGE_VERSION> --output <OUTPUT_DIRECTORY> --configuration <CONFIGURATION>
      dotnet nuget push <PACKAGE_PATH> --source https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json --api-key <ANY_STRING>
    displayName: "Build, pack and push"          

Observação

O ApiKey é usado apenas como um espaço reservado.

Não há suporte para YAML no TFS.