Рубрики
Uncategorized

Удалить ненужные изображения в реестре Google Artifact

Когда мы нажимаем изображение контейнера к реестру Google Artifact с тем же тегом, что и существующее изображение, … Tagged CoogleCloud, Docker, DEVOPS.

Когда мы нажимаем изображение контейнера к реестру Google Artifact с тем же тегом, что и существующее изображение, тег на существующем изображении удален, оставляя нам изображение без тега.

Все изображения занимают пространство и рассчитывают на ваш счет. Предполагая, что вы не используете для ненужных изображений, не было бы неплохо, если бы мы могли удалить все их сразу?

Существующие решения

В отличие от политики жизненного цикла ECR Amazon, есть В настоящее время Нет белого перчатки (официальный) способ сделать это на GCP. Но у нас есть варианты.

Я видел несколько способов решать эту проблему, особенно GCR Cleaner , который упоминается в Google контейнерных реестра Официальная документация . Есть также несколько хороших методов в этом Вопрос переполнения стека

Дайте эти подходы к чтению, чтобы увидеть, могут ли они соответствовать вашему случаю использования.

Мое решение

Мое решение использует планировщик Cloud Build и Cloud с помощью скрипты PowerShell и Shell. Это немного проще, чем решения, упомянутые выше, но хорошо работает.

Команды ниже предназначены для Google Cloud Реестр артефактов (Не быть путать с Регистрация контейнера ). Вы можете легко изменить gcloud Команды ниже, чтобы приспособиться к последнему.

Предварительные условия

  • Учетная запись услуг для вашего планировщика облачного планировщика с ролью редактора сборки Cloud Build, поэтому она может вызвать сборки.
  • Ваша учетная запись службы Cloud Build должна иметь разрешение на список изображений реестра артефактов в вашем проекте, но вам может потребоваться дать ему дополнительные Artifactregistry.versions.delete разрешение.
  • Репозиторий Git, содержащий 2 файла ниже, добавляется в качестве источника к вашему загрузку облака.

Облачный сценарий сборки

Установите _Repo Переменная замещения в вашем облачном морозе триггера к репозиторию изображений, которое вы хотите очистить, например:

us-central1-docker.pkg.dev/my-project/my-container-apps

# cloudbuild.yaml

steps:
  - id: List untagged images
    name: gcr.io/cloud-builders/gcloud
    entrypoint: sh
    args:
      - -c
      - |
        gcloud artifacts docker images list $_REPO --include-tags \
          --filter='-tags:*' --format=json > untagged.json
        cat untagged.json
  - id: Format list of untagged images
    name: mcr.microsoft.com/powershell
    entrypoint: pwsh
    args:
      - ./New-UntaggedImageList.ps1
  - id: Delete untagged images
    name: gcr.io/cloud-builders/gcloud
    entrypoint: sh
    args:
      - -c
      - |
        if test -f clean.txt; then
          while read i; do
            gcloud artifacts docker images delete --quiet "$i"
          done < clean.txt
        else
          echo "No untagged images."
        fi

Если вы свободно говорят в сценарии Shell, вы, вероятно, можете пропустить шаг PowerShell выше и набрать скрипт оболочки на последнем шаге с некоторыми разбором JSON. По сравнению с моим подходом это уборщик, потому что он не требует записи на файловую систему и дополнительный шаг сборки. Но я считаю, что PowerShell лучше использовать при работе с Json Omited by GCloud .

PowerShell Script

Сценарий PowerShell принимает наш untaged.json Разбирает его, объединяет каждый пакет и переваривать (SHA256) в строку на одной строке и добавляет его в текстовый файл. Если файл JSON пуст ( i.e. , нет ненужных изображений), этот шаг пропускается.

# New-UntaggedImageList.ps1

$UntaggedImages = Get-Content untagged.json | ConvertFrom-Json

If ($UntaggedImages) {
    $UntaggedImages | ForEach-Object {
        $p, $v = $_.package, $_.version
        Add-Content clean.txt "$p`@$v"
    }
} Else {
    Write-Host 'No untagged images.'
}

Конец

Я устанавливаю свою частоту работы планировщика облаков для 33 15 * * 4 Так что он работает раз в неделю в четверг в 15:33 в моем часовом поясе. Вместо того, чтобы использовать планировщик облака для запуска вашей сборки, вы, безусловно, можете интегрировать шаги в существующую сборку.

Если этот пост был полезен для вас или у вас есть лучшее решение, я бы хотел услышать об этом.

Оригинал: «https://dev.to/misterorion/delete-untagged-images-on-google-cloud-440i»