Partilhar via


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

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

Com os Pipelines do Azure, você pode usar pipelines clássicos ou YAML para publicar seus pacotes NuGet em seu feed de Artefatos do Azure, feeds externos ou registros públicos, como nuget.org. Neste artigo, você aprenderá a:

  • Gerar um pacote NuGet no Azure Pipelines
  • Publicar pacotes em feeds internos e externos
  • Publicar pacotes para NuGet.org

Pré-requisitos

Criar um pacote NuGet

Há várias maneiras de criar seus pacotes NuGet, como usar a dotnet ou nuget.exe CLI para empacotar seus pacotes. Se você já estiver usando o MSBuild ou outras tarefas para criar seus pacotes, você pode pular esta seção e prosseguir para a próxima.

Para criar um pacote NuGet, adicione o seguinte trecho ao seu arquivo YAML. Consulte Tarefa NuGet para obter mais detalhes.

- task: NuGetCommand@2
  inputs:
    command: pack
    packagesToPack: '**/*.csproj'
    packDestination: '$(Build.ArtifactStagingDirectory)'
  • packagesToPack: o padrão que a tarefa usa para procurar diretórios csproj para empacotar.
  • packDestination: diretório onde os pacotes são criados. Se estiverem vazios, os pacotes serão criados na raiz de origem.

Controle de versão do pacote

Os pacotes NuGet são definidos por seus nomes e números de versão. O uso do Controle de Versão Semântico é uma abordagem recomendada para gerenciar versões de pacotes de forma eficaz. As versões semânticas são compostas por três componentes numéricos: Maior, Menor e Patch.

O número do patch é incrementado após a correção de um bug. Ao lançar um novo recurso compatível com versões anteriores, você incrementa a versão secundária e redefine a versão do patch para 0. Por outro lado, ao fazer uma alteração incompatível com versões anteriores, você incrementa a versão Principal e redefine as versões Secundária e Patch para 0.

O Controle de Versão Semântico também suporta o uso de rótulos de pré-lançamento para marcar pacotes. Basta acrescentar um hífen seguido da sua tag de pré-lançamento, por exemplo: 1.0.0-beta.

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

  • Use a data e a hora (Clássico) | byPrereleaseNumber (YAML): A versão do pacote segue 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.

Abaixo 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 Tarefa CLI do .NET Core para obter mais detalhes.

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

Publicar pacotes em feeds internos

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.

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

Publicar pacotes em feeds externos

Para publicar seus pacotes em feeds NuGet externos ou registros públicos, como feeds em outras organizações ou nuget.org de DevOps do Azure, você deve primeiro criar uma conexão de serviço para autenticar com o respetivo serviço:

  1. No seu projeto do Azure DevOps, navegue até Configurações>do projeto: Conexões de serviço>

  2. Selecione Nova conexão>de serviço NuGet>Next.

  3. Preencha os campos obrigatórios e selecione Salvar quando terminar. Consulte Gerenciar conexões de serviço para obter mais detalhes.

Nota

A tarefa NuGetAuthenticate@1 oferece suporte a conexões de serviço com autenticação básica, mas não oferece suporte à autenticação Apikey. Para usar a autenticação ApiKey, você deve usar a tarefa NuGetCommand@2 em vez disso.

Para publicar seus pacotes NuGet em um feed em uma organização diferente, adicione o seguinte trecho ao seu pipeline YAML:

  • Usando a tarefa de linha de comando e 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"          
    
  • Usando a tarefa de linha de comando e 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"          
      ```
    
    

Nota

O ApiKey é necessário, mas você pode usar qualquer cadeia de caracteres ao publicar em um feed de Artefatos do Azure.

Publicar em NuGet.org

  1. Inicie sessão na sua conta nuget.org e gere uma chave API.

  2. Navegue até seu projeto de DevOps do Azure e selecione ícone de engrenagemConfigurações do projeto.

  3. Selecione Conexões de Serviço e, em seguida, selecione Nova conexão de serviço.

  4. Selecione NuGet e, em seguida, selecione Avançar.

  5. Selecione ApiKey como seu método de autenticação e use a seguinte url para seu URL de feed: https://api.nuget.org/v3/index.json.

  6. Insira a ApiKey gerada anteriormente e forneça um nome de conexão de serviço.

  7. Selecione Conceder permissão de acesso a todos os pipelines e, em seguida, selecione Salvar quando terminar. Observe que você precisa da função Administrador da conexão de serviço para selecionar essa opção.

steps:
- task: NuGetCommand@2
  displayName: 'NuGet push'
  inputs:
    command: push
    nuGetFeedType: external
    publishFeedCredentials: nuget.org