Archiviazione degli artefatti della build in Cloud Storage

Questa pagina spiega come archiviare gli artefatti di build in Cloud Storage.

Ti consigliamo di utilizzare Artifact Registry per archiviare gli artefatti di build. Artifact Registry è un Google Cloud prodotto che puoi integrare con Cloud Build per archiviare e gestire in modo sicuro i tuoi artefatti in repository privati o pubblici. L'archiviazione degli artefatti in Artifact Registry ti consente di:

Per istruzioni sulla configurazione di Cloud Build per archiviare pacchetti e immagini dalle build in Artifact Registry, consulta Archiviare gli artefatti in Artifact Registry.

Archiviare gli artefatti in Cloud Storage

Per archiviare artefatti non container in Cloud Storage, aggiungi un artifacts campo nel file di configurazione della build con la posizione del bucket in cui archiviare l' artefatto e il percorso di uno o più artefatti:

YAML

artifacts:
  objects:
    location: [STORAGE_LOCATION]
    paths: [[ARTIFACT_PATH],[ARTIFACT_PATH], ...]

Dove,

  • [STORAGE_LOCATION]: un bucket Cloud Storage o una cartella all'interno del bucket in cui Cloud Build deve archiviare l'artefatto, ad esempio gs://mybucket o gs://mybucket/myproject/builds. Per trovare i nomi dei bucket esistenti, consulta Elencare i bucket o creare un nuovo bucket.
  • [ARTIFACT_PATH]: percorso di uno o più artefatti. [ARTIFACT_PATH] è relativo alla directory di lavoro. Può essere /workspace, che è la directory di lavoro predefinita di Cloud Build, o la directory di lavoro che hai impostato utilizzando il campo dir.

JSON

{
    "artifacts": {
        "objects": {
            "location": [
                "[STORAGE_LOCATION]"
            ],
            "paths": [
            [
                "[ARTIFACT_PATH]"
            ],
            [
                "[ARTIFACT_PATH]"
            ],
            "..."
            ]
        }
    }
}

Dove,

  • [STORAGE_LOCATION]: un bucket Cloud Storage o una cartella all'interno del bucket in cui Cloud Build deve archiviare l'artefatto, ad esempio gs://mybucket o gs://mybucket/myproject/builds. Per trovare i nomi dei bucket esistenti, consulta Elencare i bucket o creare un nuovo bucket.
  • [ARTIFACT_PATH]: percorso di uno o più artefatti. [ARTIFACT_PATH] è relativo alla directory di lavoro. Può essere /workspace, che è la directory di lavoro predefinita di Cloud Build, o la directory di lavoro che hai impostato utilizzando il campo dir.

Tieni presente le seguenti limitazioni quando archivi gli artefatti in Cloud Storage:

  • Puoi specificare un solo bucket in cui caricare gli artefatti e devi esserne il proprietario. Puoi specificare un percorso di directory valido nel bucket.

  • Puoi caricare un numero qualsiasi di artefatti, ma puoi specificare solo fino a cento percorsi di artefatti.

  • Se carichi un artefatto in un bucket che ne contiene già uno con lo stesso nome, il nuovo artefatto sostituirà quello esistente. Puoi attivare il controllo delle versioni degli oggetti per il bucket se non vuoi che l'artefatto più recente sostituisca un artefatto esistente con lo stesso nome.

Una volta completata correttamente la build, puoi trovare i risultati del caricamento nel file manifest JSON che si trova in [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.

Il file manifest JSON ha i seguenti campi:

  • location: specifica la posizione in Cloud Storage in cui è archiviato un artefatto ed è nel formato gs://[STORAGE_LOCATION]/[FILE_NAME]#[GENERATION_NUMBER]. Puoi utilizzare il numero di generazione per identificare in modo univoco una versione dei dati nel bucket Cloud Storage.
  • file_hash: specifica il tipo di hash e il valore. Il tipo di hash è sempre 2, il che indica che è stato eseguito l'hash MD5.

Esempi di artefatti

Gli esempi seguenti mostrano come utilizzare il campo Artifacts in un file di configurazione della build. In tutti questi esempi, sostituisci [VALUES_IN_BRACKETS] con i valori appropriati.

Caricare file e cartelle

Il file di configurazione della build riportato di seguito carica helloworld.class in gs://[STORAGE_LOCATION]/:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.class"
            ]
        }
    }
}

Per caricare più di un artefatto, specifica il percorso di ogni artefatto separato da una virgola. L'esempio seguente carica HelloWorld.java, HelloWorld.class e cloudbuild.yaml in gs://[STORAGE_LOCATION]/:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['HelloWorld.java', 'HelloWorld.class', 'cloudbuild.yaml']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class",
                "cloudbuild.yaml"
            ]
        }
    }
}

Puoi anche caricare gli artefatti in un percorso di directory valido nel bucket. L'esempio seguente carica HelloWorld.java e HelloWorld.class in gs://[BUCKET_NAME]/[FOLDER_NAME]:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['HelloWorld.java']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/[FOLDER_NAME]'
    paths: ['HelloWorld.java', 'HelloWorld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "HelloWorld.java"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/[FOLDER_NAME]",
            "paths": [
                "HelloWorld.java",
                "HelloWorld.class"
            ]
        }
    }
}

Utilizzare i caratteri jolly per caricare più di un artefatto

Quando carichi più artefatti, puoi utilizzare caratteri jolly in paths per specificare più file.

L'esempio seguente accetta come argomento un file denominato classes, che contiene i nomi dei file .java da compilare. Carica quindi tutti i file .class nel bucket Cloud Storage specificato:

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[STORAGE_LOCATION]/'
    paths: ['*.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[STORAGE_LOCATION]/",
            "paths": [
                "*.class"
            ]
        }
    }
}

Utilizzare le variabili di sostituzione nella posizione del bucket

Puoi utilizzare le variabili di sostituzione per specificare una cartella all'interno del bucket Cloud Storage. Se la cartella specificata non esiste, Cloud Build la creerà per te.

L'esempio seguente carica gli artefatti in un percorso Cloud Storage che include il nome del Google Cloud progetto da cui è stata eseguita la build (ad esempio gs://mybucket/myproject/):

YAML

steps:
- name: 'gcr.io/cloud-builders/javac'
  args: ['@classes']
artifacts:
  objects:
    location: 'gs://[BUCKET_NAME]/$PROJECT_ID'
    paths: ['helloworld.class']

JSON

{
    "steps": [
    {
        "name": "gcr.io/cloud-builders/javac",
        "args": [
            "@classes"
        ]
    }
    ],
    "artifacts": {
        "objects": {
            "location": "gs://[BUCKET_NAME]/$PROJECT_ID",
            "paths": [
                "helloworld.class"
            ]
        }
    }
}

Passaggi successivi