development

TeamCity Nuget Feed에서 특정 버전의 패키지를 제거하는 방법은 무엇입니까?

big-blog 2020. 12. 29. 08:22
반응형

TeamCity Nuget Feed에서 특정 버전의 패키지를 제거하는 방법은 무엇입니까?


TeamCity Nuget Feed에서 특정 버전의 패키지를 제거하는 방법을 아는 사람이 있습니까?


이제 웹 UI를 통해 지원됩니다.

빌드를 열고 Actions>를 선택하여 문제가되는 빌드를 제거하십시오 Remove. 이렇게하면 TeamCity의 목록에서 빌드가 제거되고 Nuget 피드에서 해당 특정 빌드의 모든 빌드 아티팩트도 제거됩니다 .


나는 이것이 오래 전에 요청되었다는 것을 알고 있지만 여전히이 문제를 가끔씩 만나고 항상 그것을하는 방법을 잊어 버렸습니다. 그래서 나는 약간 더 쉬울 것이라고 생각하는 내 솔루션을 게시 할 것이라고 생각했습니다 (어떻게 보이는지에 따라 그것에).

기본적으로 저는 불행히도 제가 다시 만들려고했지만 몇 가지 수정을 한 타사 패키지의 더프 버전을 만든 TeamCity 빌드를 실행했습니다. 작동하지 않았지만 패키지 관리자 내에서 항상이 더프 패키지를 제공 받았으며 타사가 최신 버전을 출시 할 때까지이 상태로 유지 될 것임을 의미했습니다. 따라서 TeamCity Nuget 서버에서 패키지를 삭제하고 싶었고이를 수행 할 수있는 유일한 방법은 아티팩트 (이 경우 더프 Nuget 패키지)도 삭제하는 빌드를 삭제하는 것입니다.

이제 REST API를 제외하고는 빌드를 삭제하는 방법을 볼 수 없었기 때문에 그것이 제가 사용한 것입니다 (저는 어리석지 않고 실제로 UI에서 빌드를 삭제하는 쉬운 방법이 있기를 바랍니다). 필자는 피들러를 사용하여 DELETE 명령을 생성했습니다. 이것은 아래에 표시된 것과 유사한 삭제 요청을 게시함으로써 달성되었습니다.

Fiddler에서 Composer 창으로 이동합니다. 'GET'대신 'DELETE'를 선택하고 아래 양식에 TeamCity URL을 입력하십시오.

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

빌드 ID는 TeamCity에서 삭제할 빌드를 선택할 때 URL을 검사하여 찾을 수 있습니다 ( 'buildId'쿼리 매개 변수 다음에있는 번호 찾기). 다른 유일한 단계는 권한 헤더를 명령에 추가하는 것입니다. Request Headers 창의 'User-Agent'아래 줄에 다음을 입력합니다.

Authorization: Basic (Username:Password encoded as base64)

사용자 이름 / 암호를 base64로 인코딩하려면 fiddler에서 도구-> 텍스트 마법사로 이동하여 사용자 이름 : 암호 형식으로 TeamCity 세부 정보를 입력합니다. 마지막으로 '실행'버튼을 선택하면 빌드가 모두 Nuget 패키지와 함께 삭제됩니다.

이것은 나를 위해 일했지만 잘못된 빌드를 삭제하고 싶지 않으므로이 모든 작업을 수행 할 때 분명히 조심하십시오. 먼저 TeamCity 서버를 백업 / 스냅 샷하는 것이 현명 할 수 있습니다.

이것이 누군가를 돕기를 바랍니다.


우선, 임시 NuGet 패키지 삭제는 아직 TeamCity에서 직접 지원되지 않는 것으로 보입니다 . 개방 문제 그것에 대해 JetBrains의와 함께,하지만 현재 계획된 수정은 없다. 즉, 특정 문제를 극복하고 귀하의 문제에 도움이 될 수있는 해결 방법을 고안했습니다.

잘못된 (가속) 버전을 사용하는 일련의 nupkg 파일이 있습니다. 따라서 현재 만들고있는 패키지보다 "새로운"것으로 보입니다. 잘못된 버전 만 제거 할 방법없이 각 개별 TeamCity 빌드 구성의 "아티팩트 정리"정책을 짧은 기간 (2 일)으로 설정하고 정리를 실행했습니다. 이 작업을 수행하려면 시스템 관리자 권한이 필요합니다.

이것은 마지막 아티팩트보다 하루 오래된 아티팩트를 제거하고 모든 잘못된 패키지를 정리했습니다. NuGet 명령 줄 List명령을 통해이를 확인했습니다 . 최신 패키지가 정확하므로 이제 NuGet 피드에서 좋은 패키지 만 광고하고 있습니다.

물론 이것은 "정밀 핵"옵션이며 모든 사람에게 적용되지 않을 수 있습니다. 가까운 장래에 TeamCity가 NuGet 명령 줄 API를 완전히 지원하기를 바랍니다.


비슷한 문제가 있기 때문에 이제이 게시물을 찾은 것이 세 번째입니다. 그것은 밝혀 JetBrains의와 티켓 "작업"드롭 다운을 클릭하고 "제거를 선택, 직접 특정 빌드에 대한 세부 정보를 열어이 지원 인 TeamCity 지금은 (적어도 우리의 버전 9.1)과 .. - 오래 전에 폐쇄되었다 . " 이렇게하면 TeamCity의 빌드와 nuget 패키지 저장소의 아티팩트가 제거되므로 약간 복잡한 방식으로 REST 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>

King Roger의 답변 확장 ... 우체부 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에 표시되는 빌드 번호와 동일한 태그에서 빌드 ID 출력을 검색 한 다음

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

다른 창에서 teamcity에 로그인했거나 내부적으로 열리도록 teamcity를 구성했기 때문에 인증 태그 또는 다른 헤더가 필요하지 않았지만 URL 및 헤더에 팝업해야 할 수도 있습니다.


다른 사람들이 언급했듯이 JetBrains가 제안한 해결 방법 은 삭제하려는 아티팩트 ( 즉, NuGet 패키지 )를 생성 한 빌드 를 삭제하는 것입니다.

curl 7.3x (ubuntu 및 Windows 용 Git / 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


King Roger의 답변에 확장하여 Fiddler에서 요청을 작성하는 약간 다른 방법을 사용했습니다. 특정 Teamcity 빌드에 대한 Get 요청을 만들고 Chrome 개발자 도구에서 http 헤더를 가져 왔습니다. Fiddler의 요청 헤더 상자에 복사하여 붙여 넣었습니다. 이렇게하면 사용자 이름과 암호를 인코딩 할 필요가 없습니다.

참조 URL : https://stackoverflow.com/questions/10218318/how-to-remove-a-specific-version-of-a-package-on-a-teamcity-nuget-feed

반응형