Подтвердить что ты не робот

Как удалить определенную версию пакета на фиде TeamCity Nuget?

Кто-нибудь знает, чтобы удалить определенную версию пакета на Feed Team Nortel TeamCity?

4b9b3361

Ответ 1

Теперь это поддерживается через веб-интерфейс пользователя

Просто удалите оскорбительную сборку, открыв сборку и выбрав Actions > Remove. Это удаляет сборку из списка в TeamCity, , а также удаляет все артефакты сборки этой конкретной сборки из фида Nuget.

Ответ 2

Я знаю, что это было задано давно, но я все время сталкиваюсь с этой проблемой каждый раз и снова, и я всегда забываю, как это сделать, поэтому я решил, что опубликую свое решение, которое, я думаю, может быть немного легче (в зависимости от того, что как вы смотрите на него).

В принципе, я запустил сборку TeamCity, которая, к сожалению, создала версию duff стороннего пакета, которую я пытался воссоздать, но с несколькими модификациями. Это не сработало, но это означало, что мне всегда предоставляли этот пакет duff в менеджере пакетов, и он останется таким, пока третье лицо не выпустит более новую версию. Поэтому я хотел удалить пакет с сервера TeamCity Nuget, и единственный способ, который я смог найти, - удалить сборку, которая также удалит артефакты (пакет Duff Nuget в этом случае).

Теперь я не мог видеть способ удаления сборки, кроме как с помощью REST API, так что я использовал (надеюсь, что я не глуп, и на самом деле это простой способ удалить сборки из пользовательского интерфейса). Я использовал fiddler для создания команды DELETE. Это было достигнуто просто путем отправки запроса на удаление, аналогичного тому, что показано ниже:

От fiddler перейдите в окно Composer. Выберите "DELETE" вместо "GET" и введите URL-адрес TeamCity в форме ниже:

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

Идентификатор сборки можно найти, просто проверив URL-адрес при выборе сборки, которую вы хотите удалить из TeamCity (ищите номер после параметра запроса "buildId" ). Единственным другим шагом было добавить заголовок авторизации в команду. Введите следующее в строке ниже "User-Agent" в окне заголовков запросов.

Authorization: Basic (Username:Password encoded as base64)

Чтобы закодировать свое имя пользователя/пароль в качестве base64, перейдите в Инструменты- > Мастер текста в скрипач и введите данные TeamCity в этом формате - Имя пользователя: Пароль. Наконец, вы должны выбрать кнопку "Выполнить", и все будет хорошо, сборка будет удалена вместе с пакетом Nuget.

Это сработало для меня, но, очевидно, будьте осторожны при выполнении всего этого, так как вы не хотите удалять неправильную сборку. Возможно, предусмотрительно создать резервную копию/моментальный снимок сервера TeamCity.

Надеюсь, это поможет кому-то.

Ответ 3

Во-первых, похоже, что удаление ad-hoc-пакетов NuGet не поддерживается напрямую в TeamCity. Существует открытая проблема с JetBrains, но в настоящее время нет исправления. Тем не менее, мы разработали обход, который заставил нас пройти нашу конкретную проблему и может помочь вам.

У нас была серия файлов nupkg, в которых использовалась некорректная (ускоренная) версия. Таким образом, они оказались "более новыми", чем те пакеты, которые мы сейчас создаем. Без способа удаления только неверных версий мы устанавливаем каждую отдельную конфигурацию TeamCity "Очистить артефакты" в короткое окно (2 дня) и запускаем очистку. Для этого вам понадобятся права системного администратора.

Это удалило любые артефакты на один день старше последнего артефакта и очистило все наши плохие пакеты. Мы проверили это с помощью команды командной строки NuGet List. Поскольку более свежие пакеты верны, мы теперь рекламируем только хорошие пакеты в нашем канале NuGet.

По общему признанию, это опция "точное ядерное оружие" и может не работать для всех. Я надеюсь, что TeamCity полностью поддерживает API командной строки NuGet в ближайшем будущем.

Ответ 4

В третий раз я нахожу этот пост, потому что у меня есть аналогичная проблема. Оказывается, что билет с jetbrains был закрыт давно - и TeamCity теперь (по крайней мере, наша версия 9.1) прямо поддерживает это, открывая детали для конкретной сборки, щелкните раскрывающееся меню "Действия" и выберите "Удалить...". Это приведет к удалению сборки из TeamCity, а также к артефактам из репозитория пакетов nuget - таким образом, полностью устраняя необходимость вызова REST api слегка запутанными способами.

Выложив это, я мог бы даже вспомнить это сам, в следующий раз, когда мне нужно это сделать.

Ответ 5

Я создал powershell script, чтобы сделать это в соответствии с ответом короля Роджерса.

Сохраните этот script как 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>

Ответ 6

Расширение ответа Кинга Роджера... расширение клиентского хрома клиента 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

Найдите вывод вашего идентификатора сборки, в том же теге, что и номер сборки, который вы видите в teamcity, затем

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

Мне не нужны теги авторизации или любые другие заголовки, возможно, когда я был зарегистрирован в teamcity в другом окне или мы настроили teamcity, чтобы они были открыты внутри, но вам может понадобиться вставить их в URL-адрес и заголовки.

Ответ 7

Как уже упоминалось, Предлагаемое решение JetBrains заключается в удалении сборки, создавшей артефакт, то есть Пакет NuGet - который вы хотите удалить.

С curl 7.3x (найденный на ubuntu и Git для Windows/msysgit), следующая команда удаляет номер сборки 42:

curl -v -u <username>:<password> -X DELETE http://teamcity:8111/httpAuth/app/rest/builds/42
  • Обратите внимание на использование коротких опций (-X вместо -request, -u вместо -user); длинные варианты не сработали для меня.
  • Опустите :<password>, если вы хотите получить запрос на ввод пароля.
  • Ответ HTTP/1.1 204 No Content указывает на успех.

Полная документация: http://confluence.jetbrains.com/display/TCD8/REST+API#RESTAPI-Generalinformation

Ответ 8

В продолжении ответа Кинга Роджера я использовал несколько иной способ составления запроса в Fiddler. Я сделал запрос Get к определенной сборке Teamcity и захватил заголовки http из инструмента разработчика Chrome. Скопированы и вставлены в поле заголовка запроса Fiddler. Таким образом, мне не нужно было кодировать имя пользователя и пароль.

Ответ 9

Встроенный в NuCet канал TeamCity использует хранилище артефактов TeamCity в качестве хранилища пакетов NuGet, поэтому удаление вручную артефакта из хранилища артефактов также должно удалять его из канала. Расположение по умолчанию для хранения артефактов -/system/artifacts. Источник: https://youtrack.jetbrains.com/issue/TW-19959