如何删除TeamCity Nuget Feed上特定版本的软件包?

有谁知道删除TeamCity Nuget Feed上的特定版本的软件包?

现在通过Web UI支持

只需打开构build并select“ Actions >“ Remove的构build。 这将从TeamCity中的列表中删除构build, 并从Nuget提要中删除该特定构build的所有构build工件

我知道这是很久以前的问题,但我仍然偶然遇到这个问题,我总是忘记怎么做,所以我想我会发布我的解决scheme,我认为可能会稍微容易一些(取决于你看什么样的方式在它)。

基本上,我跑了一个TeamCity构build,不幸地创build了一个第三方包的duff版本,我试图重新创build,但有一些修改。 它不起作用,但这意味着我总是在软件包pipe理器中使用这个duff软件包,它会一直这样,直到第三方发布一个更新的版本。 因此,我想从TeamCity的Nuget服务器中删除这个包,唯一能find的方法是删除这个也会删除这个artefacts的文件(在这种情况下是duff包)。

现在,除了使用REST API之外,我无法看到删除构build的方式,所以这就是我所使用的(我希望我不是愚蠢的,实际上是从UI中删除构build的简单方法)。 我用小提琴来生成DELETE命令。 这是通过简单发布一个类似于我在下面显示的删除请求来实现的:

从小提琴手到composer php窗口。 select“DELETE”而不是“GET”,然后在下面的表格中input您的TeamCityurl:

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

当您从TeamCity中select要删除的构build时,只需检查URL即可find构build标识(查找“buildId”查询参数后面的数字)。 唯一的另一个步骤是将授权头添加到命令。 在“请求标题”窗口的“用户代理”下方的行中input以下内容。

 Authorization: Basic (Username:Password encoded as base64) 

要将您的用户名/密码编码为base64,请转到提琴手中的工具 – >文本向导,并以此格式input您的TeamCity详细信息 – 用户名:密码。 最后,你应该select'Execute'button,一切正常,构build将随着Nuget包一起被删除。

这对我工作,但显然要小心,这样做,因为你不想删除错误的构build。 首先备份/快照您的TeamCity服务器可能是谨慎的。

希望这有助于某人。

首先,TeamCity中并没有直接支持删除专门的NuGet包。 JetBrains对此有一个公开的问题 ,但是目前还没有修复计划。 也就是说,我们devise了一个解决scheme,让我们超越了我们的具体问题,并可能帮助您。

我们有一系列使用不正确(加速)版本的nupkg文件。 因此,他们似乎比我们现在创造的包裹“更新”。 没有办法只删除不正确的版本,我们将每个TeamCity构buildconfiguration的“清理工件”策略设置为一个短窗口(2天)并运行清理。 您将需要系统pipe理员权限来执行此操作。

这删除了比上一个工件旧一天的任何工件,并清除了所有我们的坏包。 我们通过NuGet命令行List命令validation了这一点。 由于最近的包裹是正确的,我们现在只是在我们的NuGet饲料广告良好的包。

无可否认,这是一个“精确的核武器”选项,可能不适合每个人。 我希望TeamCity能在不久的将来完全支持NuGet命令行API。

现在是我第三次find这个post,因为我有类似的问题。 事实certificate, jetbrains的票已经很久以前closures了 – 现在TeamCity(至less是我们的9.1版)直接支持这个,打开一个特定版本的细节,点击“Actions”下拉菜单,然后select“Remove .. “。 这将从TeamCity中删除构build以及nuget包仓库中的构件 – 从而完全消除了以稍微复杂的方式调用REST API的需要。

张贴了这个,我甚至可以自己记住,下一次我需要这样做。

我创build了一个PowerShell脚本,按照King Rogers的回答来完成这个任务。

将此脚本保存为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> 

正如其他人所说, JetBrainsbuild议的解决方法是删除产生工件的构build,即NuGet包 ,这是您要删除的工具。

使用curl 7.3x(在ubuntu和Git for Windows / msysgit上find),以下命令删除内部版本号42:

 curl -v -u <username>:<password> -X DELETE http://teamcity:8111/httpAuth/app/rest/builds/42 
  • 注意使用短期选项-X代替-request-u代替-user ); 很长的select并不适合我。
  • 省略:<password>如果你想提示你input密码。
  • HTTP/1.1 204 No Content响应表示成功。

完整的文档: http : //confluence.jetbrains.com/display/TCD8/REST+API#RESTAPI-Generalinformation

扩展国王罗杰的答案…邮递员REST客户端扩展是一个简单的方法来实现它与小工具。

 > 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 

然后,search输出您的构buildID,与您在teamcity中看到的构build编号相同的标记

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

我不需要授权标签或任何其他标题,可能是因为我在另一个窗口中login了teamcity,或者我们已经configurationteamcity在内部打开,但是您可能需要将它们popup到url和标题中。

为了扩大国王罗杰的答案,我用小提琴手的方式稍微不同。 我向一个特定的TeamCity构build发出了Get请求,并从Chrome Developer工具中获取了http头。 复制并粘贴到Fiddler的请求标题框中。 这样我就不必编码用户名和密码。