Publicar pacotes NuGet com o Azure Pipelines (YAML/Classic)
Azure DevOps Services | 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.
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione sua definição de pipeline.
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
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione sua definição de pipeline.
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.
Entre na organização do Azure DevOps onde seu pipeline será executado e navegue até seu projeto.
Navegue até as configurações do Project Conexões> de serviço.
Selecione Nova conexão de serviço, selecione NuGet e, em seguida, selecione Avançar.
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.
Quando terminar, selecione Guardar.
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione sua definição de pipeline.
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
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione sua definição de pipeline.
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
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 umaname:
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)'