0
votes

VSTS BuildClient.getartifactContEncepiasipasync jette Microsoft.VisualStudio.Services.webapi Exception

J'essaie d'automatiser la construction d'artefact de téléchargement. L'objectif est de télécharger un artefact de construction spécifique. Lorsque j'appelle buildclient.getartifactcontentenipipasync code>, il lance l'erreur suivante

Entrez la description de l'image ici p>

J'utilise le code suivant P >

   at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<HandleResponseAsync>d__53.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.VisualStudio.Services.WebApi.VssHttpClientBase.<SendAsync>d__51.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.TeamFoundation.Build.WebApi.BuildHttpClientBase.<GetArtifactContentZipAsync>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at Utils.Dashboard.FrmAzureDashboard.<BtnDownloadKHP_Click>d__13.MoveNext() in C:\code\MetaFXTools\ui\Utils\Dashboard\FrmAzureDashboard.cs:line 118


0 commentaires

3 Réponses :


0
votes

Est-ce un bogue dans l'API / SDK? ou est-ce que je fais quelque chose de mal?

Je peux confirmer le Code de Ashamrai est correct. (Je l'ai testé avec mon VS2019 16.6 et ça fonctionne bien.) Et il peut y avoir quelque chose avec les valeurs de vos variables. Je vous suggère d'utiliser try-attraper pour appeler la fonction downloadbuildresults afin que vous puissiez partager un message d'erreur détaillé ici. Je viens de changer un peu de votre code ci-dessus: xxx

Vous devez donc vous assurer:

1.Vous avez Un brevet valide qui n'a pas encore expiré et cette PAT a l'accès à la construction d'artefact. Ensuite, entrez directement la PAT dans UserPat = "xxxxxxxxxxxxxxx"; . Il devrait être "pat" au lieu de "" .

2.Le URL (TFURL) n'a besoin que d'un nom d'organisation.

3.LAquez que vous choisissez le nom d'artefact correct.

4.Distez la différence entre BuildID et builddefinitionID . < / p>

  • Vous pouvez voir builddefinitionID lors de la modification du pipeline:

     Entrez la description de l'image ici

    • Vous pouvez voir BuildID lors de la vérification des résultats de l'exécution du pipeline dans le portail Web:

       Entrez la description de l'image ici

      Vous devez utiliser le BuildID comme entrée.

      5. De plus, la construction que vous exécutez (bâtiments) devrait avoir l'artefact publié:

      Entrez la description de l'image ici

      Votre pipeline devrait avoir Publier des artefacts de construction tâche. Vérifiez le journal et assurez-vous que quelque chose est publié, le dossier à publier ne peut pas être vide.

      6.Sait que vous testez uniquement le code par téléchargement Fonction Artefact, assurez-vous de la file d'attente / exécutez le Construisez avec succès avant votre exécution du code. (Attendez la fin de la course de pipeline.)


9 commentaires

Merci. J'ai vérifié que les jetons de construction et de Pat sont corrects car d'autres opérations sur le SDK fonctionnent bien. Le message d'erreur est en question Description. J'essaie sur VS2017 avec .NET 4.8. Pas sûr si cela fait toute différence.


@Abhishek J'utilise VS2019 pendant que je ne pense pas que ce soit la principale cause de la question. Pourriez-vous partager un exemple de projet minimal via Github Link afin que nous puissions le vérifier directement pour vous? (Supprimez le code principal et remplacez les informations personnelles telles que PAT, URL avec *** pour protéger vos données personnelles)


J'ai mis à jour l'échantillon en description de la question. GIST: GIST.GITUB.COM/ABHISHEKGOENKA/9759256F995E7F7C9CBCB7872C859 1C0


@Abhishek Merci pour le repo, je le vérifierais plus tard et vous le feriez savoir si j'ai une mise à jour :)


@Abhishek Votre échantillon semble un peu différent de l'échantillon d'origine de votre question. Peut-être que vous oubliez d'ajouter .result dans la ligne lancant l'erreur dans votre échantillon GitHub. Essayez de coder dur-codant les paramètres tels que ceci: zipstream = attendre buildclient.getartifactcontententenipasync ("myProjectName", mybuildid, "myArtifactName"). Résultat; Assurez-vous également que tous les packages Nuget sont la dernière version.


J'ai essayé la suggestion ci-dessus. Mais toujours, j'ai la même erreur. Tous les paramètres de getArtifactContentzipasync sont corrects car buildClient.getartifactasync est complet sans erreur avec les mêmes paramètres. J'ai également copié la trace complète de la pile d'erreurs dans la description d'émission


J'ai de nouveau testé le code d'échantillon dans un projet de console .NET 4.8 dans VS2017, avec toutes les dernières versions des packages Nuget. Mon échantillon de code fonctionne bien. Avez-vous vraiment essayé mon échantillon de code sans le modifier?


... assez étrange, que diriez-vous de créer une nouvelle organisation de test, un nouveau projet de test et un nouveau accès complet à tester le code.


Ce serait un grand travail. J'ai eu une certaine solution de contournement. Je continuerai avec ça. Merci pour votre temps et effort.



1
votes

J'ai aussi frappé le même problème.

Ce que j'ai déterminé jusqu'à présent, c'est que l'appel à GetArtifactContentzipasync entraîne une réponse 302 du serveur.

(l'en-tête de l'emplacement dans la réponse est le long des lignes de: https://artproroduks1.artifacts.visualstudio.com/.../_apis/artifact/.../Content?format=zip )

à l'intérieur de GetArtifactContentzipasync est un appel à httpresponsemessage.ensursucccessstatusTusSatusCode () et cette erreur doit être lancée car la bibliothèque ne s'attend pas à une redirection à être renvoyée. Il est possible de créer la connexion à l'aide de: Nouvelle VSConnection (URI, CRÉDÔTS, NOUVEAU VSSCLIENTHTTPQUESTSETTES {EVERAUTTOREDIRECT = TRUE}), de sorte que la redirection soit suivie, cependant, alors les erreurs avec un message différent indiquant qu'une version incorrecte a été envoyée à la version incorrecte. serveur.


1 commentaires

J'ai fini par utiliser getArtifactasyc (). Ressource.downloadurl avec un httpClient Demande de téléchargement de l'artefact de pipeline. Voir Github.com/microsoft/azure-devops-auth-semples / arbre / maître / ... pour authentifier la demande httpclient .



-1
votes

Je dois connaître la raison de l'exception étant jetée lors de l'appel de cette API. Dans le pipeline si vous utilisez «Publier des artefacts de construction» pour publier les artefacts, l'API fonctionnera bien. Alors que si vous utilisez une tâche "Publier Pipeline Artifact", l'API reviendra 302 ("trouvé").

Microsoft n'a actuellement aucune solution de contournement pour ce problème et je vous suggère d'utiliser httpClient ou WebClient pour télécharger les artefacts.


0 commentaires