Publicar pacotes NuGet com o Azure Pipelines (YAML/Clássico)
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
No Azure Pipelines, é possível usar o editor clássico ou as tarefas YAML para publicar os pacotes NuGet no pipeline para o feed do Azure Artifacts ou para os registros públicos, como o nuget.org.
Criar um pacote NuGet
Há várias maneiras de criar seus pacotes NuGet, como usar o Visual Studio para empacotar seus pacotes NuGet. Se você já estiver usando o MSBuild ou alguma outra tarefa para criar seus pacotes, pule esta seção e vá para a seção Publicar pacotes NuGet.
Para criar um pacote NuGet, adicione o snippet a seguir ao arquivo YAML do pipeline. Para obter mais informações, consulte Tarefa NuGet.
- task: NuGetCommand@2
inputs:
command: pack
packagesToPack: '**/*.csproj'
packDestination: '$(Build.ArtifactStagingDirectory)'
- packagesToPack: padrão para pesquisar diretórios csproj para empacotar
- packDestination: diretório onde os pacotes são criados
Controle de versão do pacote
Os pacotes NuGet são diferenciados por seus nomes e números de versão. Empregar o controle de versão semântico é uma estratégia recomendada para gerenciar efetivamente as versões do pacote. As versões semânticas consistem em três componentes numéricos: Principal, Secundária e Patch.
O 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 como 0. Quando você faz uma alteração incompatível com versões anteriores, você incrementa a versão secundária e redefine as versões secundária e do patch como 0.
Com o Controle de Versão Semântico, você também pode usar rótulos de pré-lançamento para marcar seus pacotes. Para fazer isso, insira um hífen seguido da marca de pré-lançamento: por exemplo, 1.0.0-beta. O controle de versão semântico tem suporte no Azure Pipelines e pode ser configurado na tarefa do NuGet da seguinte maneira:
Use a data e a hora (Clássico): byPrereleaseNumber (YAML). A versão do pacote está no formato: Major.Minor.Patch-ci-datetime , onde você tem a flexibilidade de escolher os valores das versões principal, secundária e de patch.
Use uma variável de ambiente (Clássico): byEnvVar (YAML). A versão do pacote é definida como o valor da variável de ambiente especificada.
Use o número de build (Clássico): byBuildNumber (YAML). A versão do pacote é definida como o número da compilação. Defina o formato do número de build em Opções de pipeline como
$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)
. Para definir o formato no YAML, adicione uma propriedadename:
na raiz do pipeline e adicione o formato.
O exemplo a seguir mostra como usar a opção de controle de versão de data e hora para gerar uma versão compatível com SemVer formatada 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. Para obter mais informações, consulte a tarefa CLI do .NET Core.
task: DotNetCoreCLI@2
inputs:
command: pack
versioningScheme: byPrereleaseNumber
majorVersion: '$(Major)'
minorVersion: '$(Minor)'
patchVersion: '$(Patch)'
Publicar pacotes do NuGet
Para publicar pacotes em um feed de Artefatos do Azure a partir de seu pipeline, a identidade do pipeline deve ter a função Publicador de Feed (Colaborador) no feed. Para obter mais informações, veja permissões de pipelines.
steps:
- task: NuGetAuthenticate@1
displayName: 'NuGet Authenticate'
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
publishVstsFeed: '<projectName>/<feed>'
allowPackageConflicts: true
Para publicar um pacote em um feed externo do NuGet, primeiro você deve criar uma conexão de serviço para se conectar a esse feed. Para criar uma conexão de serviço:
- Acesse Configurações de projeto>Conexões de serviço>Nova conexão de serviço.
- Selecione NuGet e selecione Avançar.
- Preencha o formulário e selecione Salvar quando terminar.
Para obter mais informações, confira Gerenciar conexões de serviço.
Observação
A tarefa NuGetAuthenticate@1 oferece suporte a uma conexão de serviço usando autenticação básica. A tarefa não oferece suporte à autenticação de chave da API do NuGet. Se a conexão de serviço usa ApiKey, você deve usar a tarefa NuGetCommand@2 e especificar a chave de API do NuGet no campo Argumentos. Para obter mais informações, consulte Tarefa NuGet.
Para publicar um pacote em um feed externo do NuGet, adicione o snippet a seguir ao pipeline do YAML.
Usando atarefa Linha de comando (com 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 atarefa Linha de comando (com 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 valor arbitrário ao enviar para os feeds do Azure Artifacts.
Publicar no NuGet.org
Navegue até o projeto do Azure DevOps e selecione Configurações de projeto.
Selecione Conexões de Serviço e, em seguida, Nova conexão de serviço.
Selecione NuGet e selecione Avançar.
Selecione ApiKey como seu método de autenticação. Use a seguinte URL para a URL do Feed: https://api.nuget.org/v3/index.json.
Insira a ApiKey que você gerou anteriormente e insira um nome de conexão de serviço.
Selecione Conceder permissão de acesso a todos os pipelines e Salvar quando terminar. Para selecionar essa opção, você precisa da função de Administrador da conexão de serviço.
Adicione o seguinte snippet YAML à sua definição de pipeline:
steps:
- task: NuGetCommand@2
displayName: 'NuGet push'
inputs:
command: push
nuGetFeedType: external
publishFeedCredentials: nuget.org
Artigos relacionados
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de