Publicar pacotes NuGet com o Azure Pipelines (YAML/Classic)

Serviços de DevOps do Azure | Azure DevOps Server 2022 - Azure DevOps Server 2019

Usando o Azure Pipelines, você pode publicar seus pacotes NuGet em feeds de Artefatos do Azure em sua organização, em outras organizações e em registros públicos, como nuget.org, usando pipelines Classic ou YAML. Neste artigo, vai aprender a:

  • Publicar pacotes em um feed interno
  • Publicar pacotes em um feed em uma organização diferente
  • Controle de versão do pacote

Pré-requisitos

  • Crie uma organização do Azure DevOps e um projeto, se ainda não o fez.

  • Crie um novo feed se ainda não tiver um.

  • Se você estiver usando um agente auto-hospedado, verifique se ele tem o SDK do .NET Core (2.1.400+) e o NuGet (4.8.0.5385+) instalados.

Publicar pacotes NuGet em um feed na mesma organização

Nota

Para publicar seus pacotes em um feed usando o Azure Pipelines, certifique-se de que o Serviço de Compilação de Coleção de Projetos e as identidades de Serviço de Criação do seu projeto recebam a função de Editor de Feed (Colaborador) atribuída nas configurações de feed. Consulte Gerenciar permissões para obter mais detalhes.

  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione sua definição de pipeline.

  3. Selecione Editar e adicione o seguinte trecho ao seu pipeline YAML.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@0
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push
  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione sua definição de pipeline.

  3. Selecione Editar e adicione o seguinte trecho ao seu pipeline YAML.

steps:
- task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
  displayName: 'NuGet Tool Installer'

- task: NuGetAuthenticate@1
  displayName: 'NuGet Authenticate'

- script: |
      nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
  displayName: Push

Publicar pacotes NuGet em um feed em outra organização

Para publicar seus pacotes NuGet em um feed em uma organização diferente do Azure DevOps, você deve primeiro criar um token de acesso pessoal (PAT) na organização de destino. Navegue até a organização que hospeda seu feed de destino e crie um token de acesso pessoal com o escopo Packaging>Read & write. Assim que a PAT for criada, copie-a e armazene-a num local seguro, pois precisará dela na secção seguinte para configurar uma ligação de serviço.

  1. Entre na organização do Azure DevOps onde seu pipeline será executado e navegue até seu projeto.

  2. Navegue até as configurações do Project Conexões> de serviço.

  3. Selecione Nova conexão de serviço, selecione NuGet e, em seguida, selecione Avançar.

  4. Selecione Servidor de DevOps do Azure Externo como o método de Autenticação e insira a URL do Feed de destino. Cole o Token de Acesso Pessoal criado anteriormente, forneça um nome para sua conexão de serviço e marque Conceder permissão de acesso a todos os pipelines , se aplicável ao seu cenário.

  5. Quando terminar, selecione Guardar.

    Uma captura de tela exibindo como configurar uma conexão de serviço NuGet para autenticar com um feed externo em uma organização diferente.

  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione sua definição de pipeline.

  3. Selecione Editar e adicione o seguinte trecho ao seu pipeline YAML.

    - task: NuGetToolInstaller@1                                # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@1
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
          nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push       
    
  1. Entre em sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione sua definição de pipeline.

  3. Selecione Editar e adicione o seguinte trecho ao seu pipeline YAML.

    - task: NuGetToolInstaller@1                            # Minimum required NuGet version: 4.8.0.5385+.
      displayName: 'NuGet Tool Installer'
    
    - task: NuGetAuthenticate@0
      inputs:
        nuGetServiceConnections: <SERVICE_CONNECTION_NAME>
    
    - script: |
        nuget.exe push -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" -ApiKey az $(Build.ArtifactStagingDirectory)\*.nupkg
      displayName: Push          
    

Uma captura de tela exibindo o pacote publicado com êxito em um feed em uma organização diferente.

Controle de versão do pacote de tarefas NuGet

O Azure Pipelines dá suporte ao Controle de Versão Semântico e fornece as seguintes opções de configuração para tarefas do NuGet:

  • Use a data e a hora (Clássico) | byPrereleaseNumber (YAML): Sua versão do pacote seguirá o formato: Major.Minor.Patch-ci-datetime, onde você tem a flexibilidade de personalizar os valores Major, Minor e Patch.

  • Usar uma variável de ambiente (Clássico) | byEnvVar (YAML): Sua versão do pacote é definida como o valor da variável de ambiente especificada.

  • Use o número de compilação (Clássico) | byBuildNumber (YAML): A versão do pacote está definida como o número da compilação. Certifique-se de definir o formato de número de compilação em suas Opções de pipeline como $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Para especificar o formato em YAML, adicione uma name: propriedade na raiz do pipeline e defina o formato.

A seguir está um exemplo demonstrando como usar o controle de versão de data e hora para gerar um pacote compatível com SemVer formatado como: Major.Minor.Patch-ci-datetime.

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

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

Nota

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

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