Compartilhar via


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

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

Com o Azure Pipelines, você pode usar pipelines clássicos ou YAML para publicar seus pacotes NuGet em seu feed do Azure Artifacts, 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 no NuGet.org

Pré-requisitos

Criar um pacote NuGet

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

Para criar um pacote NuGet, adicione o trecho a seguir ao seu arquivo YAML. Confira 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 estiver vazio, 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. É recomendado usar o controle de versão semântico para gerenciar efetivamente as versões do pacote. As versões semânticas são compostas por três componentes numéricos: principal, secundário e de patch.

O número de patch é incrementado após a correção de um bug. Ao lançar um recurso novo compatível com versões anteriores, você incrementa a versão secundária e redefine a versão de patch como 0. Em contrapartida, quando faz uma alteração incompatível com versões anteriores, você incrementa a versão principal e redefine as versões secundária e de patch como 0.

O controle de versão semântico também oferece suporte ao uso de rótulos de pré-lançamento para marcar pacotes. Basta acrescentar um hífen seguido da 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 as tarefas NuGet:

  • Usar 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 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.

Abaixo temos 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. Consulte a tarefa CLI do .NET Core para obter mais informações.

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

Publicar pacotes em feeds internos

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.

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 do Azure DevOps ou nuget.org, você deve primeiro criar uma conexão de serviço para autenticar com o respectivo serviço:

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

  2. Selecione Nova conexão de serviço>NuGet>Próximo.

  3. Preencha os campos necessários e selecione Salvar quando terminar. Confira Gerenciar conexões de serviço para obter mais detalhes.

Observação

A tarefa NuGetAuthenticate@1 dá suporte a conexões de serviço com autenticação básica, mas não à autenticação Apikey. Para usar a autenticação ApiKey, você deve utilizar 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 pipeline do YAML:

  • Usar a tarefa 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"          
    
  • Usar a tarefa 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"          
      ```
    
    

Observação

O ApiKey é necessário, mas você pode usar qualquer sequência ao publicar em um feed do Azure Artifacts.

Publicar no NuGet.org

  1. Entre na sua conta nuget.org e Gere uma chave de API.

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

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

  4. Selecione NuGet e selecione Avançar.

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

  6. Insira a ApiKey que você gerou anteriormente e forneça um Nome de conexão de serviço.

  7. Selecione Conceder permissão de acesso a todos os pipelines e Salvar quando terminar. Observe que você precisa da função de 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