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

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

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

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

Pré-requisitos

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

Observação

Para publicar seus pacotes em um feed usando o Azure Pipelines, o Serviço de build de coleção de projetos e as identidades do Serviço de build do seu projeto devem ter a função Publicador de feed (colaborador) atribuída nas suas configurações de feed. Consulte Gerenciar permissões para obter mais detalhes.

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

  2. Selecione Pipelines e, em seguida, selecione a definição do pipeline.

  3. Selecione Editar e adicione o snippet a seguir ao 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 na sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione a definição do pipeline.

  3. Selecione Editar e adicione o snippet a seguir ao 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, primeiro você deve criar um PAT (token de acesso pessoal) na organização de destino. Navegue até a organização que hospeda seu feed de destino e Criar um token de acesso pessoal com o escopo Empacotamento>Leitura & gravação scope. Depois que o PAT for criado, copie-o e armazene-o em um local seguro, pois você precisará dele na seção a seguir para configurar uma conexão de serviço.

  1. Faça logon na organização do Azure DevOps em que o pipeline será executado e navegue até o projeto.

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

  3. Selecione Nova conexão de serviço e, selecione NuGet, em seguida, selecione Próximo.

  4. Selecione Azure DevOps Server Externo como o Método de autenticação e insira a URL do feed de destino. Cole o Token de Acesso Pessoal que você criou 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. Selecione Salvar ao terminar.

    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 na sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione a definição do pipeline.

  3. Selecione Editar e adicione o snippet a seguir ao 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 na sua organização do Azure DevOps e navegue até seu projeto.

  2. Selecione Pipelines e, em seguida, selecione a definição do pipeline.

  3. Selecione Editar e adicione o snippet a seguir ao 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 NuGet.

O Azure Pipelines oferece suporte controle de versão semântico e oferece as seguintes opções de configuração para as tarefas NuGet:

  • Usar a data e a hora (clássico) | byPrereleaseNumber (YAML): a versão do pacote seguirá no formato: Major.Minor.Patch-ci-datetime , onde você tem a flexibilidade de personalizar os valores principal, secundário e de patch.

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

  • Usar o número de compilação (clássico) | byBuildNumber (YAML): a versão do pacote é definida como o número de compilação. Defina o formato do número de build em Opções no seu pipeline como $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r). Para especificar o formato no YAML, adicione uma propriedade name: na raiz do seu pipeline e defina o formato.

Veja abaixo um exemplo de 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)'

Observação

Os pacotes DotNetCore e DotNetStandard devem ser empacotados com a tarefa DotNetCoreCLI@2 para evitar System.InvalidCastExceptions. Confira a tarefa .NET Core 2.0 para obter mais detalhes.

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