web-dev-qa-db-ja.com

TeamCity Nuget Feedから特定のバージョンのパッケージを削除するにはどうすればよいですか?

TeamCity Nuget Feedから特定のバージョンのパッケージを削除することを知っている人はいますか?

59
matt_dev

これはWeb UIを通じてサポートされるようになりました

ビルドを開き、Actions> Removeを選択して、問題のビルドを削除するだけです。これにより、TeamCityのリストからビルドが削除されますまた、特定のビルドのすべてのビルドアーティファクトがNugetフィードから削除されます

43
theDmi

私はこれがずっと前に尋ねられたことを知っていますが、私はまだこの問題に時々遭遇し、私は常にそれを行う方法を忘れているので、私は少し見た方が簡単だと思う私の解決策を投稿すると思いました(あなたがどのように見えるかに依存します)それで)。

基本的に、私はTeamCityビルドを実行しましたが、残念ながら、サードパーティパッケージのダフバージョンを作成しましたが、再作成を試みましたが、いくつかの変更が加えられています。動作しませんでしたが、パッケージマネージャー内で常にこのダフパッケージが提示されていたので、サードパーティが新しいバージョンをリリースするまで、このままです。そのため、TeamCity Nugetサーバーからパッケージを削除したかったのですが、これを行う唯一の方法は、アーティファクト(この場合はduff Nugetパッケージ)も削除するビルドを削除することでした。

REST APIを除いて、ビルドを削除する方法がわからなかったので、これを使用しました(私が愚かではなく、実際に簡単に削除できる方法があることを願っています) UIからビルドします。フィドラーを使用してDELETEコマンドを生成しました。これは、以下に示すものと同様の削除要求を送信するだけで実現できました。

フィドラーから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としてエンコードするには、fiddlerで[ツール]-> [テキスト] Wizardと入力し、TeamCityの詳細をユーザー名:パスワードの形式で入力します。最後に、[実行]ボタンを選択し、すべてが正常であれば、ビルドはNugetパッケージと共に削除されます。

これは私にとってはうまくいきましたが、間違ったビルドを削除したくないので、これをすべて行うときは明らかに注意してください。最初にTeamCityサーバーをバックアップ/スナップショットするのが賢明です。

これが誰かを助けることを願っています。

33
King Roger

まず、Ad-hoc NuGetパッケージの削除は、TeamCityでは 直接はサポートされていません のようです。 JetBrainsには 未解決の問題 がありますが、現在計画されている修正はありません。とはいえ、私たちは特定の問題を回避するための回避策を考案しました。

誤った(高速化された)バージョンを使用する一連のnupkgファイルがありました。したがって、それらは現在作成しているパッケージよりも「新しい」ように見えました。不適切なバージョンのみを削除する方法がない場合、個々のTeamCityビルド構成の「クリーンアーティファクト」ポリシーを短いウィンドウ(2日間)に設定して、クリーンアップを実行しました。これを行うには、システム管理者権限が必要です。

これにより、最後のアーティファクトより1日古いアーティファクトが削除され、すべての不良パッケージが削除されました。これは、NuGetコマンドラインListコマンドを使用して確認しました。最新のパッケージが正しいため、現在は、NuGetフィードで適切なパッケージのみを宣伝しています。

確かに、これは「精密な核」オプションであり、すべての人に役立つとは限りません。 TeamCityが近い将来にNuGetコマンドラインAPIを完全にサポートすることを願っています。

17
SethO

私が同様の問題を抱えているため、この投稿を見つけるのは3回目です。 jetbrains付きのチケット はかなり前にクローズされたことがわかりました-そしてTeamCity(少なくとも私たちのバージョン9.1)は特定のビルドの詳細を開いてこれを直接サポートし、[アクション]ドロップダウンをクリックします、[削除...]を選択します。これにより、TeamCityからのビルドとnugetパッケージリポジトリからのアーティファクトが削除されます。したがって、REST apiを少し複雑な方法で呼び出す必要がなくなります。

これを投稿したので、次にこれを行う必要があるときに、自分でも覚えているかもしれません。

8
Jan Hansen

私は、ロジャース王の回答に沿ってこれを行うための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>
4

キングロジャーの答えを拡張する...郵便配達人REST client chrome extensionは、ほとんどのツールでそれを実現する簡単な方法です。

> HTTP GET to http://servername:port/httpAuth/app/rest/builds/

出力は次のようになります

<builds count="100" nextHref="/httpAuth/app/rest/builds?count=100&amp;start=100">
    <build id="48459" number="1.0.187-nightly" ... etc

Teamcityに表示されるビルド番号と同じタグで、ビルドIDの出力を検索します。

> HTTP DELETE to http://servername:port/httpAuth/app/rest/builds/*theid*

別のウィンドウでteamcityにログインしているか、teamcityを内部で開くように設定しているため、認証タグやその他のヘッダーは必要ありませんでしたが、URLとヘッダーにそれらをポップする必要がある場合があります。

2
MattWazEre

他の人が述べたように、 JetBrainsの推奨される回避策 は、artifactを生成したビルドを削除することです。つまり、NuGetパッケージ-削除するもの。

Curl 7.3x(ubuntuおよびGit for Windows/msysgitにあります)では、次のコマンドによりビルド番号42が削除されます。

curl -v -u <username>:<password> -X DELETE http://teamcity:8111/httpAuth/app/rest/builds/42
  • short optionsを使用します(-Xの代わりに-request-uの代わりに-user);長いオプションは私にはうまくいきませんでした。
  • パスワードの入力を求める場合は、:<password>を省略します。
  • HTTP/1.1 204 No Contentの応答は成功を示します。

完全なドキュメント: http://confluence.jetbrains.com/display/TCD8/REST+API#RESTAPI-Generalinformation

2
Justin M. Keyes

キングロジャーの答えを拡張して、フィドラーでリクエストを構成する方法が少し異なりました。特定のTeamcityビルドに対してGetリクエストを作成し、Chrome開発者ツールからhttpヘッダーを取得しました。それらをFiddlerのリクエストヘッダーボックスにコピーして貼り付けました。これにより、ユーザー名とパスワードをエンコードする必要がなくなりました。

0
user1369721