Configura i criteri di pulizia

Un criterio di pulizia di Artifact Registry definisce i criteri per eliminare automaticamente le versioni degli artefatti di cui non hai più bisogno o per conservare gli artefatti che vuoi archiviare a tempo indeterminato.

I criteri di pulizia sono utili se memorizzi molte versioni dei tuoi elementi, ma devi conservare solo versioni specifiche rilasciate in produzione. Puoi definire criteri di eliminazione con i criteri per eliminare gli elementi e criteri di conservazione con i criteri per conservarli.

Se una versione dell'elemento corrisponde ai criteri sia in una norma di eliminazione sia in una norma di conservazione, Artifact Registry applica la norma di conservazione.

Le eliminazioni attivate dai criteri di eliminazione vengono conteggiate ai fini della quota di richieste di eliminazione per progetto di Artifact Registry e sono limitate a 300.000 eliminazioni al giorno per repository.

Pianificazione dell'applicazione delle norme

Artifact Registry elimina e conserva gli elementi corrispondenti alle tue norme di pulizia utilizzando un job in background che viene eseguito periodicamente. Le modifiche vengono applicate entro circa un giorno.

Numero massimo di criteri di pulizia per repository

A un repository puoi applicare un massimo di 10 criteri di pulizia.

Formati supportati

Puoi impostare un criterio di pulizia sui repository standard e remoti per tutti i formati dei repository.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per applicare o rimuovere i criteri di pulizia, chiedi all'amministratore di concederti il ruolo IAM Amministratore del registry di elementi (roles/artifactregistry.admin) nel progetto del repository. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questo ruolo predefinito contiene le autorizzazioni necessarie per applicare o rimuovere i criteri di pulizia. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per applicare o rimuovere le norme di pulizia sono necessarie le seguenti autorizzazioni:

  • artifactregistry.repositories.update
  • Per eliminare gli elementi che soddisfano i criteri in un criterio di pulizia: artifactregistry.versions.delete

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Il ruolo predefinito per l'agente di servizio Artifact Registry include l'autorizzazione artifactregistry.versions.delete, necessaria per eliminare le immagini che soddisfano i criteri in un criterio di pulizia.

Creare un file di criteri

Un file di criteri è un file JSON che definisce i criteri di eliminazione e conservazione. Puoi creare un file di criteri creando e modificando un file JSON, quindi utilizzando Google Cloud CLI per applicare il criterio o la console Google Cloud. I criteri di eliminazione specificano le condizioni per l'eliminazione degli artefatti. I criteri di conservazione specificano le condizioni per conservare un artefatto o un numero di versioni recenti da conservare. Non puoi utilizzare le condizioni e le versioni più recenti nella stessa regola di conservazione.

Creare un criterio di eliminazione

Un criterio di eliminazione ti consente di specificare la data minima o massima per l'eliminazione degli elementi e criteri di filtro aggiuntivi per limitare il criterio a elementi specifici.

Se hai determinati elementi che non vuoi che vengano eliminati per qualsiasi motivo, crea un criterio di conservazione condizionale o un criterio di conservazione delle versioni più recenti, nonché un criterio di eliminazione. Se un elemento corrisponde ai criteri sia nel criterio di eliminazione sia nel criterio di conservazione, viene mantenuto.

console

Puoi creare un criterio di eliminazione per un repository nuovo o esistente.

Per aggiungere un criterio di eliminazione a un repository esistente:

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona il repository e fai clic su Modifica repository.

  3. Nella sezione Criteri di pulizia, seleziona Esecuzione simulata per testare il nuovo criterio prima di impegnarti a eliminare gli elementi. Per ulteriori informazioni su come visualizzare i risultati del test, consulta prova simulata.

    Una volta accertato che il criterio funziona come previsto, modifica di nuovo le impostazioni del repository e seleziona Elimina artefatti per applicare il criterio di pulizia ed eliminare gli artefatti selezionati.

  4. Fai clic su Aggiungi una policy di pulizia e aggiungi quanto segue:

    • Nome: assegna un nome alla policy di pulizia. Il nome deve essere univoco all'interno del gruppo di criteri applicati a un repository.
    • Tipo di criterio: seleziona Eliminazione condizionale.
    • Stato del tag: indica se la norma deve verificare la presenza di elementi con tag o senza tag. Gli elementi vengono taggati quando si esegue il push o il pull di un'immagine in un repository o da un repository. Per saperne di più sui tag Docker, consulta Concetti relativi ai container.

      • Qualsiasi stato del tag: ignora lo stato del tag e si applica sia agli elementi con tag sia a quelli senza tag.
      • Con tag: si applica solo agli elementi con tag.
      • Senza tag: si applica solo agli elementi non taggati.

      I formati che non supportano i tag vengono trattati come untagged. Se in un repository sono abilitati i tag immutabili, gli elementi con tag non possono essere eliminati.

      Per ulteriori informazioni sullo stato del tag in relazione ai criteri di pulizia, consulta la sezione Riferimento a TagState.

  5. Di seguito sono riportati modi facoltativi per definire il criterio di eliminazione:

    • Prefisso dei tag: è un elenco separato da virgole di prefissi dei tag. Ad esempio, i prefissi test e staging corrispondono alle immagini con i tag testenv e staging-1.5. tagState deve essere impostato su TAGGED per utilizzare i prefissi dei tag.
    • Prefissi versione: è un elenco separato da virgole dei prefissi delle versioni degli elementi. Ad esempio, v1, v2 corrisponderebbe alle versioni v1.5, v2.0alpha e v10.2.
    • Prefissi pacchetto: è un elenco di prefissi dei nomi degli elementi. Puoi inserire più prefissi premendo Enter o , tra un prefisso e l'altro. Ad esempio, red, blue creerebbe due prefissi, red e blue, e corrisponderebbe ai nomi degli elementi red-team, redis e bluebird.
    • Più vecchio di: è il tempo minimo trascorso dalla creazione della versione di un elemento nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni. Puoi specificare durate in secondi, minuti, ore o giorni aggiungendo rispettivamente s, m, h o d.
    • Più recente di: è il tempo massimo trascorso dalla creazione della versione di un elemento nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni.
  6. Puoi aggiungere altre norme di pulizia facendo clic su Aggiungi una norma di pulizia.

  7. Fai clic su Aggiorna.

    Il criterio di pulizia viene applicato al repository. Puoi visualizzare le tue norme di pulizia nella sezione Dettagli del repository facendo clic su Mostra altro.

JSON

{
  "name": "DELETE_POLICY_NAME",
  "action": {"type": "Delete"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

Un criterio di eliminazione deve includere un nome, un'azione e almeno una condizione.

name
Nello snippet per l'eliminazione del criterio, DELETE_POLICY_NAME è il nome del criterio. Il nome deve essere univoco all'interno del gruppo di criteri applicati a un repository.
action
Per un criterio di eliminazione, il valore è {"type": "Delete"}.
condition
Specifica una o più delle seguenti condizioni:
  • tagState: TAG_STATUS indica se il criterio deve verificare la presenza di elementi con tag o senza tag. Gli elementi vengono taggati quando si esegue il push o il pull di un'immagine in un repository o da un repository. I valori supportati sono:

    • tagged: si applica solo agli elementi taggati.
    • untagged: si applica solo agli elementi non taggati.
    • any: ignora lo stato del tag e si applica agli elementi sia con tag che senza tag.

    I formati che non supportano i tag vengono trattati come untagged. Se in un repository sono abilitati i tag immutabili, gli elementi taggati non possono essere eliminati.

    Per saperne di più sui tag Docker, consulta Concetti relativi ai container.

  • tagPrefixes: TAG_PREFIXES è un elenco di prefisso dei tag separati da virgole. Ad esempio, "test", "staging" corrisponderebbe alle immagini con i tag "testenv" e "staging-1.5". tagState deve essere impostato su TAGGED per utilizzare i prefissi dei tag.

  • versionNamePrefixes: VERSION_PREFIXES è un elenco separato da virgole di prefissi delle versioni degli elementi. Ad esempio, "v1", "v2" corrisponde alle versioni "v1.5", "v2.0alpha" e "v10.2".

  • packageNamePrefixes: PACKAGE_PREFIXES è un elenco separato da virgole di prefissi dei nomi degli elementi. Ad esempio, "red", "blue" corrisponde ai nomi degli elementi "red-team", "redis" e "bluebird".

  • olderThan: OLDER_THAN_DURATION è il tempo minimo trascorso dalla creazione della versione di un elemento nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni. Puoi specificare durate in secondi, minuti, ore o giorni aggiungendo rispettivamente s, m, h o d.

  • newerThan: NEWER_THAN_DURATION è il tempo massimo trascorso dalla creazione della versione di un elemento nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni.

Creare un criterio di conservazione condizionale

Un criterio di conservazione condizionale specifica i criteri per la conservazione degli artefatti. I criteri di conservazione lavorano con i criteri di eliminazione per conservare gli elementi che verrebbero eliminati in base alle specifiche del criterio di eliminazione, ma che vuoi conservare. Quando un elemento corrisponde ai criteri sia di un criterio di eliminazione sia di un criterio di conservazione, viene conservato.

console

Puoi creare un criterio di conservazione per un repository nuovo o esistente.

Per aggiungere un criterio di conservazione a un repository esistente:

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona il repository e fai clic su Modifica repository.

  3. Nella sezione Criteri di pulizia, seleziona Esecuzione simulata per testare il nuovo criterio prima di impegnarti a eliminare gli elementi. Per visualizzare i risultati delle norme di conservazione, devi impostare almeno una norma di eliminazione. Per ulteriori informazioni su come visualizzare i risultati del test, consulta la sezione Eseguire un dry run.

    Una volta accertato che i criteri funzionino come previsto, modifica di nuovo le impostazioni del repository e seleziona Elimina artefatti per applicare le norme di pulizia ed eliminare gli artefatti selezionati.

  4. Fai clic su Aggiungi una policy di pulizia e aggiungi quanto segue:

    • Nome: assegna un nome alla policy di pulizia. Il nome deve essere univoco all'interno del gruppo di criteri applicati a un repository.
    • Tipo di criterio: seleziona Conservazione condizionale.
    • Stato del tag: indica se la norma deve verificare la presenza di elementi con tag o senza tag. Gli elementi vengono taggati quando si esegue il push o il pull di un'immagine in un repository o da un repository. Per saperne di più sui tag Docker, consulta Concetti relativi ai container.

      • Qualsiasi stato del tag: ignora lo stato del tag e si applica sia agli elementi con tag sia a quelli senza tag.
      • Con tag: si applica solo agli elementi con tag.
      • Senza tag: si applica solo agli elementi non taggati.

      I formati che non supportano i tag vengono trattati come untagged. Se in un repository sono abilitati i tag immutabili, gli elementi con tag non possono essere eliminati. Per ulteriori informazioni sullo stato del tag in relazione ai criteri di pulizia, consulta la sezione Riferimento a TagState.

  5. Di seguito sono riportati alcuni modi facoltativi per definire il criterio di conservazione:

    • Prefisso dei tag: è un elenco separato da virgole di prefissi dei tag. Ad esempio, i prefissi test e staging corrispondono alle immagini con i tag testenv e staging-1.5. tagState deve essere impostato su TAGGED per utilizzare i prefissi dei tag.
    • Prefissi versione: è un elenco separato da virgole dei prefissi delle versioni degli elementi. Ad esempio, v1, v2 corrisponderebbe alle versioni v1.5, v2.0alpha e v10.2.
    • Prefisso del pacchetto: è un elenco separato da virgole di prefissi dei nomi degli elementi. Ad esempio, red, blue corrisponde ai nomi degli elementi red-team, redis e bluebird.
    • Più vecchio di: è il tempo minimo trascorso dalla creazione della versione di un elemento nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni. Puoi specificare durate in secondi, minuti, ore o giorni aggiungendo rispettivamente s, m, h o d.
    • Più recente di: è il tempo massimo trascorso dalla creazione della versione di un elemento nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni.
  6. Puoi aggiungere altre norme di pulizia facendo clic su Aggiungi una norma di pulizia.

  7. Fai clic su Aggiorna.

    Il criterio di pulizia viene applicato al repository.

JSON

Il formato è simile a una norma di eliminazione. Per un criterio di conservazione, il valore di action è {"type": "Keep"}.

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "condition": {
    "tagState": "TAG_STATUS",
    "tagPrefixes": ["TAG_PREFIXES"],
    "versionNamePrefixes": ["VERSION_PREFIXES"],
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "olderThan": "OLDER_THAN_DURATION",
    "newerThan": "NEWER_THAN_DURATION"
  }
}

Sostituisci quanto segue:

  • KEEP_POLICY_NAME con il criterio di pulizia un nome. Il nome deve essere univoco all'interno del gruppo di criteri applicati a un repository.
  • TAG_STATUS con lo stato del tag, che indica se il criterio deve verificare la presenza di elementi taggati o non taggati. Gli elementi vengono contrassegnati quando si spinge o estrae un'immagine da o verso un repository. Per saperne di più sui tag Docker, consulta Concetti relativi ai container.

    Le opzioni sono:

    • tagged: si applica solo agli elementi taggati.
    • untagged: si applica solo agli elementi non taggati.
    • any: si applica a tutte le versioni

    I formati che non supportano i tag vengono trattati come untagged. Se in un repository sono abilitati i tag immutabili, gli elementi con tag non possono essere eliminati. Per ulteriori informazioni sullo stato del tag in relazione ai criteri di pulizia, consulta la sezione Riferimento a TagState.

  • TAG_PREFIXES con un elenco separato da virgole di prefissi dei tag. Ad esempio, i prefissi test e staging corrispondono alle immagini con i tag testenv e staging-1.5. tagState deve essere impostato su TAGGED per utilizzare i prefissi dei tag.

  • VERSION_PREFIXES con un elenco separato da virgole di prefissi delle versioni degli elementi. Ad esempio, v1, v2 corrisponde alle versioni v1.5, v2.0alpha e v10.2.

  • PACKAGE_PREFIXES con un elenco separato da virgole di prefissi dei nomi degli elementi. Ad esempio, red, blue corrisponde ai nomi degli elementi red-team, redis e bluebird.

  • OLDER_THAN_DURATION con il tempo minimo trascorso dalla creazione della versione di un elemento nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni. Puoi specificare durate in secondi, minuti, ore o giorni aggiungendo rispettivamente s, m, h o d.
  • NEWER_THAN_DURATION con il tempo massimo dall'ora in cui è stata creata la versione di un artefatto nel repository, specificato come durata. Ad esempio, 30d corrisponde a 30 giorni.

Crea un criterio di conservazione per le versioni più recenti

Puoi creare un criterio di conservazione per mantenere un numero specifico di versioni. Non puoi utilizzare i criteri Conservazione condizionale e Conserva le versioni più recenti nella stessa norma di conservazione.

I criteri di conservazione funzionano con i criteri di eliminazione per conservare gli elementi che verrebbero eliminati in base alle specifiche del criterio di eliminazione, ma che vuoi conservare. Quando un elemento corrisponde ai criteri sia di un criterio di eliminazione sia di un criterio di conservazione, viene conservato.

console

Puoi creare un criterio di conservazione delle versioni più recenti per un repository nuovo o esistente.

Per aggiungere un criterio di conservazione delle versioni più recenti a un repository esistente:

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona il repository e fai clic su Modifica repository.

  3. Nella sezione Criteri di pulizia, seleziona Esecuzione simulata per testare il nuovo criterio prima di impegnarti a eliminare gli elementi. Per visualizzare i risultati delle norme di conservazione, devi impostare almeno una norma di eliminazione. Per ulteriori informazioni su come visualizzare i risultati del test, consulta la sezione Eseguire un dry run.

    Una volta accertato che i criteri funzionino come previsto, modifica di nuovo le impostazioni del repository e seleziona Elimina artefatti per applicare le norme di pulizia ed eliminare gli artefatti selezionati.

  4. Fai clic su Aggiungi una policy di pulizia e aggiungi quanto segue:

    • Nome: assegna un nome alla policy di pulizia. Il nome deve essere univoco all'interno del gruppo di criteri applicati a un repository.
    • Tipo di norme: seleziona Conserva le versioni più recenti.
  5. Nel campo Conteggio mantenuto, inserisci il numero di versioni di un artefatto da conservare nel repository.

  6. (Facoltativo) Seleziona Prefisso pacchetti per specificare i prefissi dei pacchetti a cui applicare il criterio di conservazione. Ad esempio, red, blue corrisponde ai nomi degli elementi red-team, redis e bluebird.

  7. Puoi aggiungere altre norme di pulizia facendo clic su Aggiungi una norma di pulizia.

  8. Fai clic su Aggiorna.

    Il criterio di pulizia viene applicato al repository. Puoi visualizzare le tue norme di pulizia nella sezione Dettagli del repository facendo clic su Mostra altro.

JSON

Il formato è simile a una norma di eliminazione. Per un criterio di conservazione, il valore di action è {"type": "Keep"}.

Un criterio di conservazione per mantenere un numero specifico di versioni ha una sezione mostRecentVersions anziché condition.

{
  "name": "KEEP_POLICY_NAME",
  "action": {"type": "Keep"},
  "mostRecentVersions": {
    "packageNamePrefixes": ["PACKAGE_PREFIXES"],
    "keepCount": MINIMUM_NUMBER
  }
}

Sostituisci quanto segue:

  • KEEP_POLICY_NAME con un nome per il criterio di conservazione. Il nome deve essere univoco all'interno del gruppo di criteri applicati a un repository.
  • PACKAGE_PREFIXES con i prefissi dei pacchetti facoltativi a cui applicare il criterio di mantenimento. Ad esempio, red, blue corrisponde ai nomi degli elementi red-team, redis e bluebird.
  • MINIMUM_NUMBER con il numero di versioni di un artefatto da conservare nel repository.

Per applicare il criterio di conservazione a tutti i pacchetti del repository, ometti la condizione packageNamePrefixes. Viene conservato il numero specificato di versioni recenti di ciascun pacchetto nel repository.

File di criteri di esempio

Il seguente esempio di file di criteri contiene un criterio di eliminazione e due criteri di conservazione.

  • Il criterio delete-prerelease rimuove le versioni degli elementi 30 giorni dopo il caricamento se l'elemento inizia con la stringa alpha o v0.
  • Il criterio keep-tagged-release conserva gli elementi con tag del prefisso release il cui nome file inizia con webapp o mobile.
  • Il criterio keep-minimum-versions conserva le cinque versioni più recenti degli elementi con un nome file che inizia con webapp, mobile o sandbox.
[
  {
    "name": "delete-prerelease",
    "action": {"type": "Delete"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["alpha", "v0"],
      "olderThan": "30d"
    }
  },
  {
    "name": "keep-tagged-release",
    "action": {"type": "Keep"},
    "condition": {
      "tagState": "tagged",
      "tagPrefixes": ["release"],
      "packageNamePrefixes": ["webapp", "mobile"]
    }
  },
  {
    "name": "keep-minimum-versions",
    "action": {"type": "Keep"},
    "mostRecentVersions": {
      "packageNamePrefixes": ["webapp", "mobile", "sandbox"],
      "keepCount": 5
    }
  }
]

Testa le tue norme con un dry run

Per testare i criteri di pulizia, puoi impostarli per la prova nella console o eseguire il comando gcloud artifacts set-cleanup-policies con il flag --dry-run.

Per analizzare l'effetto dei criteri di pulizia, puoi visualizzare gli audit log di accesso ai dati del Registry degli elementi. Per ricevere i log di controllo dell'accesso ai dati per i criteri di pulizia, devi attivare esplicitamente il tipo di log di controllo dell'accesso ai dati scrittura dati per il servizio Artifact Registry. Per attivare gli audit log di accesso ai dati, consulta Attivare gli audit log.

console

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona il repository e fai clic su Modifica repository.

  3. Nella sezione Criteri di pulizia, seleziona Prova.

  4. Fai clic su Aggiungi un criterio di pulizia e configura le opzioni per i criteri di eliminazione condizionale, conservazione condizionale o conservazione delle versioni più recenti.

  5. Fai clic su Aggiorna.

Quando un criterio di eliminazione genera un'azione BatchDeleteVersions, il parametro validateOnly ha come risultato "true".

Per eseguire query sui log di controllo per le prove dei criteri di pulizia, esegui il seguente comando:

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

L'output è simile al seguente:

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

gcloud

Per eseguire una simulazione con i criteri di pulizia, esegui il seguente comando:

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --dry-run

Sostituisci quanto segue:

  • REPOSITORY con il nome del repository.
  • PROJECT_ID con l'ID del tuo Google Cloud progetto.
  • LOCATION è la posizione regionale o multiregionale del repository.

Quando un criterio di eliminazione genera un'azione BatchDeleteVersions, il parametro validateOnly ha come risultato "true".

Per eseguire query sui log di controllo per le prove dei criteri di pulizia, esegui il seguente comando:

gcloud logging read 'protoPayload.serviceName="artifactregistry.googleapis.com" AND protoPayload.request.parent:"projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY" AND protoPayload.request.validateOnly=true' \
    --resource-names="projects/PROJECT_ID" \
    --project=PROJECT_ID

L'output è simile al seguente:

insertId: qwe123ty3
logName: projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access
operation:
  first: true
  id: projects/my-project/locations/us-west1/operations/12345abc-fb9b-4b6f-b02c-9a397ee807d4
  producer: artifactregistry.googleapis.com
protoPayload:
  '@type': type.googleapis.com/google.cloud.audit.AuditLog
  authenticationInfo:
    principalEmail: service-774919394028@gcp-sa-staging-artreg.iam.gserviceaccount.com
  authorizationInfo:
  - granted: true
    permission: artifactregistry.versions.delete
    resource: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    resourceAttributes: {}
  methodName: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
  request:
    '@type': type.googleapis.com/google.devtools.artifactregistry.v1.BatchDeleteVersionsRequest
    names:
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:4bb3756e4e75dfbc3ced87521ed62b26d16fb4e17993ae6877165f2b6551fb55
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:e8185538b50df953529b300be4963b2c21158808becac7aa0d610f61de8ba701
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:7f7fb0a9453da49f831fe92eb8b1751be13acefe1bbd44cc3f0d63d41c422246
    - projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/docker-load-thursday/versions/sha256:84ac871a34560b39dd7bde57b4d333f18a7e8c1b61c8d350c1fefeb1fcd2b3ac
parent: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
    validateOnly: true
  requestMetadata:
    callerIp: private
    callerSuppliedUserAgent: stubby_client
    destinationAttributes: {}
    requestAttributes:
      auth: {}
      time: '2023-05-26T04:31:21.909465579Z'
  resourceName: projects/my-project/locations/us-west1/repositories/docker-test-dryrun/packages/-
  serviceName: artifactregistry.googleapis.com
receiveTimestamp: '2023-05-26T04:31:22.641338594Z'
resource:
  labels:
    method: google.devtools.artifactregistry.v1.ArtifactRegistry.BatchDeleteVersions
    project_id: my-project
    service: artifactregistry.googleapis.com
  type: audited_resource
severity: INFO
timestamp: '2023-05-26T04:31:21.909004200Z'

Applicare criteri a un repository

Per utilizzare i criteri di pulizia definiti in un file JSON locale, applicali ai repository in cui vuoi che Artifact Registry gestisca l'eliminazione automatica delle versioni degli elementi utilizzando la CLI gcloud.

Per applicare i criteri di pulizia impostati su Dry run nella console, imposta il criterio su Elimina artefatti.

Puoi applicare i criteri di pulizia solo ai repository standard. Non puoi applicare i criteri di pulizia a:

  • Un Google Cloud progetto.

console

Per applicare i criteri di pulizia:

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona il repository e fai clic su Modifica repository.

  3. Nella sezione Criteri di pulizia, seleziona Elimina artefatti.

    Artifact Registry elimina e conserva gli elementi corrispondenti ai tuoi criteri utilizzando un job in background che viene eseguito periodicamente. Le modifiche dovrebbero essere applicate entro circa un giorno.

gcloud

Per applicare i criteri di pulizia, esegui il seguente comando nella directory con il file del criterio di pulizia.

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

Sostituisci quanto segue:

  • REPOSITORY con il nome del repository.
  • PROJECT_ID con l'ID del tuo Google Cloud progetto.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • POLICY_FILE è il nome del file con il criterio di pulizia.

Il flag --no-dry-run disattiva la funzionalità di prova per il repository.

Ad esempio, il seguente comando applica i criteri in policy.json al repository my-repo nella regione us-west1 del progetto my-project.

gcloud artifacts repositories set-cleanup-policies my-repo \
    --project=my-project \
    --location=us-west1 \
    --policy=policy.json

Artifact Registry elimina e conserva gli elementi corrispondenti ai tuoi criteri utilizzando un job in background che viene eseguito periodicamente. Le modifiche dovrebbero essere applicate entro circa un giorno.

Aggiornamento di un criterio

console

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona il repository e fai clic su Modifica repository.

  3. Nella sezione Criteri di pulizia, fai clic sul nome del criterio da impostare per la modifica.

  4. Modifica il criterio di pulizia e fai clic su Aggiorna.

    Il criterio di pulizia viene applicato al repository.

gcloud

Per aggiornare le norme esistenti, modifica le impostazioni nel file delle norme, quindi esegui il seguente comando per applicare nuovamente le norme.

gcloud artifacts repositories set-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION \
    --policy=POLICY_FILE \
    --no-dry-run

Sostituisci quanto segue:

  • REPOSITORY con il nome del repository.
  • PROJECT_ID con l'ID del tuo Google Cloud progetto.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • POLICY_FILE è il nome del file con il criterio di pulizia.

Il flag --no-dry-run disattiva la funzionalità di prova per il repository.

Elenca i criteri di pulizia del repository

Puoi visualizzare i criteri di pulizia associati a un repository.

console

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona quello che vuoi visualizzare.

  3. Nella sezione Dettagli del repository, fai clic su Mostra altro.

    Vengono visualizzati i nomi dei criteri di pulizia.

  4. Per visualizzare o modificare i dettagli delle norme di pulizia del repository, fai clic su Modifica repository.

    I dettagli dei criteri di pulizia esistenti sono elencati nella sezione Criteri di pulizia.

gcloud

Esegui questo comando:

gcloud artifacts repositories list-cleanup-policies REPOSITORY \
    --project=PROJECT_ID \
    --location=LOCATION

Sostituisci quanto segue:

  • REPOSITORY con il nome del repository.
  • PROJECT_ID con l'ID del tuo Google Cloud progetto.
  • LOCATION è la posizione regionale o multiregionale del repository.

Rimuovere un criterio da un repository

Rimuovi un criterio di pulizia da un repository quando non vuoi più che Artifact Registry elimini automaticamente le versioni degli elementi.

console

  1. Apri la pagina Repositori nella console Google Cloud.

    Apri la pagina Repositori

  2. Nell'elenco dei repository, seleziona il repository e fai clic su Modifica repository.

  3. Nella sezione Criteri di pulizia, passa il mouse sopra il nome del criterio che vuoi eliminare.

  4. Fai clic sull'icona Elimina.

  5. Fai clic su Aggiorna.

    Il criterio di pulizia viene eliminato.

gcloud

Esegui questo comando:

gcloud artifacts repositories delete-cleanup-policies REPOSITORY \
    --policynames=POLICY_NAMES \
    --project=PROJECT_ID \
    --location=LOCATION

Sostituisci quanto segue:

  • REPOSITORY è il nome del repository.
  • PROJECT_IDè l'ID del tuo Google Cloud progetto.
  • LOCATION è la posizione regionale o multiregionale del repository.
  • POLICY_NAMES è un elenco separato da virgole di nomi di criteri per i criteri che vuoi rimuovere.

Ad esempio, il seguente comando rimuove un criterio denominato delete-test dal repository my-repo nella regione us-west1 del progetto my-project:

gcloud artifacts repositories delete-cleanup-policies my-repo \
    --policynames=delete-test \
    --project=my-project \
    --location=us-west1

Voci dei log di controllo per i criteri di pulizia

Per visualizzare le voci dei log dei criteri di pulizia in Cloud Logging, devi attivare la registrazione DATA_WRITE.

Quando imposti un criterio di pulizia in un repository, l'operazione viene registrata come un update del repository (operazione UpdateRepository).

Quando Artifact Registry elimina una versione di un elemento, registra l'evento nei log di accesso ai dati di Cloud Logging. Le voci di log mostrano che l'eliminazione è stata eseguita dall'account di servizio Artifact Registry. L'ID account di servizio Artifact Registry è nel formato service-PROJECT-NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com

Altri strumenti

Per le immagini container, puoi anche utilizzare i seguenti strumenti per la gestione del ciclo di vita delle immagini:

  • gcrane: uno strumento per i registry dei container che puoi utilizzare per copiare le immagini tra i repository.
  • gcr-cleaner: uno strumento per eliminare le immagini dei contenitori in base a criteri specificati.

Gli strumenti gcrane e gcr-cleaner non sono prodotti ufficiali di Google.