Azure Artifacts에서 저장된 npm 패키지 대량 삭제

제 작업에서는 npm 패키지를 Azure Artifacts 피드에 저장했습니다. 더 이상 자체 사용자 지정 패키지를 게시하지 않았기 때문에 이것이 더 이상 필요하지 않다는 것을 깨달았습니다. 또한 시간이 지남에 따라 저장된 npm 패키지의 모든 다른 버전이 클라우드 인스턴스에서 3GB에 가까운 많은 공간을 차지했습니다.

Azure DevOps REST API를 사용하여 Azure Artifacts 피드에서 모든 npm 패키지를 일괄 삭제하는 Powershell 스크립트를 만들었습니다. 패키지에 대한 전체 권한이 있는 PAT(Personal Access Token)를 생성하고 스크립트 코드에 붙여넣어야 합니다. 조직 이름과 피드 ID도 추가해야 합니다.

함께 제공되는 버전이 있는 패키지가 많은 경우 스크립트를 여러 번 실행해야 합니다. 한 번에 검색할 수 있는 저장된 패키지 버전의 수에는 제한이 있습니다.

스크립트가 작동하는 방식은 저장된 npm 패키지의 모든 버전을 검색하고 버전을 반복하고 삭제하는 것입니다. Azure Artifacts에서 패키지(npm 또는 NuGet)를 삭제하려면 특정 패키지 버전을 삭제해야 합니다. 패키지 버전을 검색하는 URL을 변경하여 패키지의 특정 버전만 삭제하려는 경우 스크립트를 수정할 수 있습니다.

다음은 스크립트입니다. 로컬 컴퓨터에서 실행하십시오.

<# Azure DevOps REST API #>
$url1 = 'https://feeds.dev.azure.com/{organization}/_apis/packaging/Feeds/{feed_id}/packages?protocolType=npm&includeAllVersions=true&api-version=7.1-preview.1'

$Token = '{Personal_Access_Token}'

if ($Token -eq "") {
    Write-Host 'PAT not set'
    exit 1
}
$AzureAuthHeader1 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", $Token)))

$headers1 = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers1.Add("Authorization", ("Basic {0}" -f $AzureAuthHeader1))
$headers1.Add("Content-Type", "application/json")

$response1 = Invoke-RestMethod -Uri $url1 -Method GET -Headers $headers1

$packages = $response1.value

<# Loops through returned npm package versions and deletes them #>
Foreach ($i in $packages)
{
    $packageName = $i.name
    Write-Host $i.name -BackgroundColor cyan
    $allversions = $i.versions
    Foreach ($v in $allversions) {
        $packageVersion = $v.version
        $url2 = 'https://pkgs.dev.azure.com/{organization}/_apis/packaging/feeds/{feed_id}/npm/{0}/versions/{1}?api-version=7.1-preview.1' -f $packageName, $packageVersion
        $AzureAuthHeader2 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f "", $Token)))

        $headers2 = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
        $headers2.Add("Authorization", ("Basic {0}" -f $AzureAuthHeader2))
        $headers2.Add("Content-Type", "application/json")

        $response2 = Invoke-RestMethod -Uri $url2 -Method DELETE -Headers $headers2
        Write-Host 'deleted' + $response2.value
    }
}


GitHub Gist link .

좋은 웹페이지 즐겨찾기