59 votes

Comment supprimer une version spécifique d'un package sur un flux TeamCity Nuget?

Est-ce que quelqu'un sait comment supprimer une version spécifique d'un package sur un flux TeamCity Nuget?

35voto

King Roger Points 265

Je sais que cela a été demandé il y a longtemps mais j'ai encore rencontré ce problème, chaque maintenant et encore et j'oublie toujours comment le faire alors j'ai pensé que je poste ma solution qui, je pense, peut-être un peu plus facile (en fonction de quelle façon vous le regardez).

En gros, j'ai couru un TeamCity construire que malheureusement créé une duff version de la 3ème partie du package que j'ai essayé de recréer mais avec un couple de modifications. Il n'a pas de travail mais il m'a toujours présenté avec cette duff colis dans le gestionnaire de paquet et il restera comme ça jusqu'à la 3e partie des rejets d'une version plus récente. En tant que tel j'ai voulu supprimer le package de la TeamCity serveur Nuget et la seule façon que j'ai pu trouver pour ce faire a été de supprimer les construire ce qui permettrait également de supprimer les artefacts (le duff package Nuget dans ce cas).

Maintenant, je ne pouvais pas voir un moyen de supprimer le construire, sauf avec le RESTE de l'API de sorte que c'est ce que j'ai utilisé (j'espère que je ne suis pas stupide et il y a en fait un moyen facile de supprimer construit à partir de l'INTERFACE utilisateur). J'ai utilisé un violon pour générer la commande de SUPPRESSION. Cela a été réalisé par le simple affichage d'une demande de suppression semblable à ce que j'ai montré ci-dessous:

De fiddler aller à la fenêtre de composition. Sélectionnez "SUPPRIMER" au lieu de " GET " et entrez votre TeamCity url dans le formulaire ci-dessous:

http://<server>:<port>/httpAuth/app/rest/builds/<build ID>

L'ID de compilation peuvent être trouvés simplement par l'inspection de l'URL lorsque vous sélectionnez le build que vous souhaitez supprimer à partir de TeamCity (regardez le nombre après le "buildId' paramètre de requête). La seule autre étape a été d'ajouter l'en-tête d'autorisation à la commande. Entrez la commande suivante sur la ligne en dessous de "User-Agent" dans les en-Têtes de Requête de la fenêtre.

Authorization: Basic (Username:Password encoded as base64)

Pour encoder votre nom d'utilisateur/mot de passe en base64 allez dans Outils->Assistant de Texte dans un violon et entrez votre TeamCity détails dans ce format - nom d'utilisateur:Mot de passe. Enfin, vous devez sélectionner l'option 'Exécuter' bouton et tout se passe bien le build va être supprimé le long avec le package Nuget.

Cela a fonctionné pour moi, mais évidemment être prudent lorsque vous faites tout ce que vous ne voulez pas supprimer la mauvaise construction. Il peut être prudent de sauvegarde/instantané de vos TeamCity serveur en premier.

Espérons que cela aide quelqu'un.

17voto

SethO Points 1580

Tout d'abord, il apparaît que la suppression de ad-hoc les packages NuGet est pas directement pris en charge dans TeamCity encore. Il y a un sujet ouvert, avec JetBrains à ce sujet, mais aucun correctif n'est actuellement prévu. Cela dit, nous avons conçu une solution que nous avons passé notre problème spécifique, et peuvent aider à la vôtre.

Nous avons eu une série de nupkg fichiers que l'utilisation d'une mauvaise (en accéléré) de la version. Ainsi, ils semblent être "récent" que les paquets que nous sommes en train de créer. Sans un moyen de supprimer uniquement les versions incorrectes, nous avons mis en chaque individu TeamCity accumulation de configuration est "Propre Artefacts" de la politique pour une courte période (2 jours) et a Nettoyer. Vous aurez besoin des privilèges d'Administrateur Système pour ce faire.

Cette supprimé tout les artefacts un jour de plus que le dernier artefact et nettoyé tous nos mauvais paquets. Nous avons vérifié ce par le biais de la commande NuGet ligne, List commande. Depuis la plus récente paquets sont corrects, nous sommes maintenant seulement de la publicité bon paquets dans nos NuGet nourrir.

Certes, c'est une "précision nuke" option et peuvent ne pas fonctionner pour tout le monde. J'espère TeamCity soutient pleinement le NuGet API en ligne de commande dans un avenir proche.

4voto

Mattias Nordqvist Points 158

J'ai créé un script PowerShell dans le sens de la réponse de King Rogers.

Enregistrez ce script sous tc_deletebuild.ps1 ...

 param($build, $teamcityhost, $username, $password)

$encodedcredentials = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($username+":"+$password))

Invoke-WebRequest -Uri "http://$teamcityhost/httpAuth/app/rest/builds/id:$build" -Method Delete -Headers @{"Authorization"="Basic $encodedcredentials"}
 

... et exécuter de powershell avec

 .\tc_deletebuild.ps1 <buildid> <host> <username> <password>
 

0voto

user1369721 Points 1

Dans le prolongement de la réponse de King Roger, j'ai utilisé une manière légèrement différente de composer la demande dans Fiddler. J'ai envoyé une requête Get à une version particulière de Teamcity et saisi les en-têtes http à partir de l'outil Chrome Developer. Copiez-les et collez-les dans la boîte des en-têtes de demande de Fiddler. De cette façon, je n'ai pas eu à encoder le nom d'utilisateur et le mot de passe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X