快速刪除VSTS Package某一個元件所有的版本

VSTS Packages可以讓我們自訂團隊的Nuget Service,我們可以把自訂元件放到VSTS內,並分享給團隊人使用,一般來說這樣應用問題不太大,不過,用一段時間發現一個問題,就是當要把這個元件從Package Feed移掉時候,並沒有想像中簡單。雖然,介面上有提供Unlist & Delete Package,前者是讓這個版本不顯示在Feed上面,後者則是把這版本元件給刪除,當然同時也不會顯示在Feed上面。

又或者不想透過介面去刪除,也可以透過Nuget指令刪掉。不過,這樣都只能一個一個手動處理,似乎不太方便,介面也不能多選後刪除,在管理上,想讓這個元件完全消失在團隊的Feed列表,就必須刪除這個元件所有版本才可以,這樣可能會按到手痠,因此,這一段就必須自己寫一點點小程式讓它自動刪除所有版本。

第一步,下載Nuget.exe


下載VSTS上面的Download NuGet + VSTS Credential Provider工具,這壓縮檔裡面會有Nuget.exe執行檔,曾經試過用nuget.org下載的Nuget.exe,即使輸入VSTS帳號密碼,依舊會再跟你要一次帳號密碼,呈現無窮迴圈狀態,所以,還是建議使用從這邊下載的Nuget.exe來用

在執行有發生彈跳一個輸入VSTS彈跳視窗,這邊只要輸入登入VSTS帳號密碼後,就可以了,後面就不需要再輸入

第二步,撰寫小程式


這邊使用PowerShell指令來撰寫,一般來說要控制VSTS Package上面可使用nugetPowerShell指令,只是後者必須在Visual Studio中的套件管理去下指令。但是,針對刪除套件這件事來說,目前就只能透過Nuget.exe執行了,而Nuget的刪除指令如下:

1
nuget delete <packageID> <packageVersion> [options]

  • 首先必須取得該套件所有版本列表,這邊加入-prerelease,主要是找出beta的版本,因為預設只會找Release版本,
1
.\NuGet.exe list {元件名稱} -Source {VSTS Feed URL} -allversions -prerelease
  • 再來就是執行Nuget的刪除指令
1
.\NuGet.exe delete {元件名稱} {版本號} -Source {VSTS Feed URL} -ApiKey {apikey}

因此,把這兩個指令組合起來,用Foreach讀取所有版本號,放入刪除功能中

1
2
3
4
5
6
7
8
9
$AllVersion= .\NuGet.exe list XXXXX -Source "https://AAAAA.pkgs.visualstudio.com/_packaging/Feed/nuget/v3/index.json" -prerelease -allversions
Foreach ($data in $AllVersion)
{
$version=$data.Split(' ')[1]
"Delete "+$version
echo 是|.\NuGet.exe delete XXXXX $version -Source "https://AAAAA.pkgs.visualstudio.com/_packaging/Feed/nuget/v3/index.json" -ApiKey XXX
"Delete OK"
}

在這邊有加入一個echo 是,這主要是當你刪除時候,會跳出詢問框,問你是否真的要刪除,為了達到自動化目的,所以加入這個指令,如果今天你的OS是英文版,要把改成Yes,後續再加工一下,把XXXXX這個元件名稱當作外部參數輸入,就可以讓ps檔能自動化執行了。就可以省下很多人工要去刪除套件版本的時間