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
Crie no Azure DevOps uma organização e um projeto, caso ainda não tenha feito isso.
Crie um novo feed se você 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+) .NET Core SDK (2.1.400+) e NuGet (4.8.0.5385+) instalados.
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.
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione a definição do pipeline.
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
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione a definição do pipeline.
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.
Faça logon na organização do Azure DevOps em que o pipeline será executado e navegue até o projeto.
Navegue até as configurações do Project Conexões> de serviço.
Selecione Nova conexão de serviço e, selecione NuGet, em seguida, selecione Próximo.
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.
Selecione Salvar ao terminar.
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione a definição do pipeline.
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
Entre na sua organização do Azure DevOps e navegue até seu projeto.
Selecione Pipelines e, em seguida, selecione a definição do pipeline.
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
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 propriedadename:
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)'