- Construir máquina Ubuntu 24.04
- É necessário substituir a tarefa NuGetCommand@2 por DotNetCoreCLI@2 .
- Enviar para o feed privado do AzureDevOps ("VSTS", nome antigo de antes do AzureDevOps)
- É necessário executar o comando push com a opção
--skip-duplicate
(parâmetro allowPackageConflicts: true na tarefa antiga). - É necessário substituir publishVstsFeed:<guid1>/<guid2> na tarefa por
--source <URL>
. Como?
Em um pipeline no Ubuntu 24.04, a antiga tarefa NuGetCommand@2 não funciona mais, porque requer o .NET Mono, que não faz mais parte das máquinas de compilação do Ubuntu 24.04.
- Comando _DotNetCoreCLI@2: 'push' não suporta allowPackageConflicts: true nem argumentos: '--skip-duplicate' .
Então termino com algo parecido com esta tarefa:
- task: DotNetCoreCLI@2
displayName: DotNet NuGet push
inputs:
# required, because NuGetCommand@2 allowPackageConflicts missing.
command: 'custom'
custom: 'nuget'
# --skip-duplicate is the direct option
# to replace allowPackageConflicts: true.
arguments: 'push $(Build.SourcesDirectory)/packagesMyPacksDir/*.nupkg --source https://pkgs.dev.azure.com/my-company/<guid1>/_packaging/<guid2>/nuget/v3/index.json -ApiKey VSTS'
Mas com um comando personalizado, todas as opções para resolver o URL do feed, como acontecia internamente na antiga tarefa NuGetCommand@2 ou com DotNetCoreCLI push , não funcionam.
Minha ideia era simplesmente inserir <guid1> e <guid2> na --source
URL, mas quando observei compilações mais antigas, com a tarefa NuGetCommand@2 , percebi que o segundo GUID não era o valor /<guid2> do publishVstsFeed:<guid1>/<guid2> anterior , mas outro GUID a cada nova execução de pipeline.
Então, como eu crio a --source
URL?
Alternativa possível: se houvesse uma chance de listar todos os pacotes NuGet para enviar e usar os comandos push do DotNetCoreCLI em um loop, isso poderia funcionar sem criar uma URL de origem, mas ainda não encontrei nenhuma maneira de fazer um loop em um número variável de arquivos.
Tivemos exatamente os mesmos problemas ao converter nosso pipeline existente para continuar trabalhando na imagem do Ubuntu 24 do DevOps. No final, chegamos à seguinte solução:
Não é ideal que tenhamos que passar a organização/projeto como parâmetros (ou codificá-los), já que com o argumento interno para feed, apenas o nome do feed é suficiente para resolvê-lo, mas funciona para nós.
Aqui está minha própria resposta, ou comente as outras respostas:
O nome do feed (e, se o feed tiver escopo de projeto, o nome do projeto anterior) deve ser um nome legível por humanos, não GUIDs
Por algum motivo, alguém copiou os GUIDs, para os quais a ferramenta resolve internamente o nome do projeto e do feed, e os adicionou como valores publishVstsFeed . Isso foi bastante enganoso, sugerindo que eu precisava de identificadores enigmáticos para a URL.
Na verdade, o
dotnet nuget push
comando resolve os nomes na URL para esses identificadores, mas eles não são realmente necessários no código do pipeline em si!Se a codificação de caracteres for necessária, ela pode ser copiada da URL da página web do artefato.
Os pontos finais da origem da embalagem devem ser semelhantes a:
Feed de nível de organização:
https://pkgs.dev.azure.com/<org-name>/_packaging/<feedname>/nuget/v3/index.json
Feed de nível de projeto:
https://pkgs.dev.azure.com/<org-name>/<projectid>/_packaging/<feedname>/nuget/v3/index.json
Você pode obter o projectId em
$(System.TeamProjectId)