TeamCity Nuget フィードで特定のバージョンのパッケージを削除する方法を知っている人はいますか?
8 に答える
これは Web UI でサポートされるようになりました
ビルドを開いてActions
>を選択して、問題のあるビルドを削除するだけRemove
です。これにより、TeamCity のリストからビルドが削除され、Nuget フィードからその特定のビルドのすべてのビルド アーティファクトも削除されます。
私はこれがずっと前に尋ねられたことを知っていますが、私はまだこの問題に何度も遭遇し、いつもそれを行う方法を忘れているので、少し簡単かもしれないと思う私の解決策を投稿することにしました(あなたがどのように見えるかに応じて)それで)。
基本的に、TeamCity ビルドを実行しましたが、残念ながらサードパーティ パッケージのダフ バージョンを作成しましたが、これを再作成しようとしましたが、いくつかの変更が加えられました。動作しませんでしたが、パッケージ マネージャー内で常にこの duff パッケージが表示され、サード パーティが新しいバージョンをリリースするまで、この状態が続くことを意味していました。そのため、TeamCity Nuget サーバーからパッケージを削除したかったのですが、これを行う唯一の方法は、アーティファクト (この場合は duff Nuget パッケージ) も削除するビルドを削除することでした。
さて、REST API を使用する以外にビルドを削除する方法が見つからなかったので、それを使用しました (愚かではないことを願っています。UI からビルドを削除する簡単な方法が実際にあります)。フィドラーを使用して DELETE コマンドを生成しました。これは、以下に示したものと同様の削除リクエストを投稿するだけで達成されました。
fiddler から Composer ウィンドウに移動します。「GET」の代わりに「DELETE」を選択し、TeamCity の URL を以下のフォームに入力します。
http://<server>:<port>/httpAuth/app/rest/builds/<build ID>
ビルド ID は、TeamCity から削除するビルドを選択するときに URL を調べるだけで見つけることができます (「buildId」クエリ パラメーターの後の番号を探します)。他の唯一の手順は、認証ヘッダーをコマンドに追加することでした。[リクエスト ヘッダー] ウィンドウの [User-Agent] の下の行に次のように入力します。
Authorization: Basic (Username:Password encoded as base64)
ユーザー名/パスワードを base64 としてエンコードするには、フィドラーで [ツール] -> [テキスト ウィザード] に移動し、TeamCity の詳細をこの形式 (ユーザー名:パスワード) で入力します。最後に、[実行] ボタンを選択すると、Nuget パッケージと共にビルドが削除されます。
これは私にとってはうまくいきましたが、間違ったビルドを削除したくないので、これをすべて行うときは明らかに注意してください。最初に TeamCity サーバーをバックアップ/スナップショットすることをお勧めします。
これが誰かに役立つことを願っています。
まず、アドホック NuGet パッケージの削除は、TeamCity ではまだ直接サポートされていないようです。これについては、 JetBrains で未解決の問題がありますが、現時点で修正の予定はありません。とはいえ、私たちは特定の問題を回避するための回避策を考案しました。
不適切な (高速化された) バージョンを使用した一連の nupkg ファイルがありました。したがって、それらは現在作成しているパッケージよりも「新しい」ように見えました。不適切なバージョンのみを削除する方法がないため、個々の TeamCity ビルド構成の「Clean Artifacts」ポリシーを短いウィンドウ (2 日間) に設定し、クリーンアップを実行しました。これを行うには、システム管理者権限が必要です。
これにより、最後のアーティファクトより 1 日古いアーティファクトが削除され、すべての不良パッケージが一掃されました。NuGet コマンド ラインList
コマンドを使用してこれを確認しました。最近のパッケージは正しいので、NuGet フィードでは適切なパッケージのみを宣伝しています。
確かに、これは「精密核」オプションであり、すべての人に有効であるとは限りません。近い将来、TeamCity が NuGet コマンドライン API を完全にサポートすることを願っています。
King Rogers の回答に沿ってこれを行うための powershell スクリプトを作成しました。
このスクリプトを 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"}
...そして、powershellから実行します
.\tc_deletebuild.ps1 <buildid> <host> <username> <password>
キング・ロジャーの答えを拡張して、私はフィドラーでリクエストを構成するわずかに異なる方法を使用しました。特定の Teamcity ビルドに対して Get リクエストを行い、Chrome 開発者ツールから http ヘッダーを取得しました。それらをコピーして、Fiddler の要求ヘッダー ボックスに貼り付けました。この方法では、ユーザー名とパスワードをエンコードする必要はありませんでした。