Archiviazione degli artefatti di build in Cloud Storage

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

Consigliamo di utilizzare Artifact Registry per l'archiviazione degli artefatti di build. Artifact Registry è un Prodotto Google Cloud 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 su come configurare Cloud Build per archiviare pacchetti e immagini dalle build in Artifact Registry, Archivia gli artefatti in Artifact Registry.

Archiviazione degli artefatti in Cloud Storage

Per archiviare artefatti non containerizzati in Cloud Storage, aggiungi un elemento artifacts 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 in cui Cloud Build deve archiviare l'artefatto, come gs://mybucket o gs://mybucket/myproject/builds. Per trovare i nomi di bucket esistenti, consulta la sezione Elenca bucket o crea un nuovo bucket.
  • [ARTIFACT_PATH]: percorso di uno o più elementi. [ARTIFACT_PATH] è rispetto alla directory di lavoro. Può essere /workspace, che è la directory di lavoro predefinita di Cloud Build o che hai impostato mediante dir .

JSON

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

Dove,

  • [STORAGE_LOCATION]: un bucket Cloud Storage o una cartella all'interno in cui Cloud Build deve archiviare l'artefatto, come gs://mybucket o gs://mybucket/myproject/builds. Per trovare i nomi bucket esistenti, consulta la sezione elencare i bucket oppure creando un nuovo bucket.
  • [ARTIFACT_PATH]: percorso di uno o più elementi. [ARTIFACT_PATH] è rispetto alla directory di lavoro. Può essere /workspace, che è la directory di lavoro predefinita di Cloud Build o che hai impostato mediante dir .

Tieni presenti le seguenti avvertenze durante l'archiviazione di artefatti in Cloud Storage:

  • Puoi specificare un solo bucket per caricare gli artefatti e devi essere il proprietario del bucket. Puoi specificare un percorso di directory valido nel bucket.

  • Puoi caricare un numero qualsiasi di elementi, ma puoi specificarne solo uno centinaia di percorsi di artefatti.

  • Se carichi un artefatto in un bucket che ha già un artefatto con lo stesso , il nuovo artefatto sostituirà quello esistente. Puoi attivare il controllo delle versioni degli oggetti non vogliamo che l'artefatto più recente sostituisca un artefatto esistente con lo stesso .

Una volta completata la build, puoi trovare i risultati del caricamento nella sezione File manifest JSON posizionato all'indirizzo [STORAGE_LOCATION]/artifacts-$BUILD_ID.json.

Il file manifest JSON contiene i seguenti campi:

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

Esempi di artefatti

I seguenti esempi mostrano come utilizzare il campo Artifacts in una build di configurazione del deployment. In tutti questi esempi, sostituisci [VALUES_IN_BRACKETS] con il i valori appropriati.

Caricamento di file e cartelle

Il file di configurazione di compilazione riportato di seguito carica helloworld.class in ilgs://[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 ciascun elemento separato da una virgola. L'esempio seguente carica HelloWorld.java, HelloWorld.class, e da cloudbuild.yaml a 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. La nell'esempio seguente vengono caricati 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"
            ]
        }
    }
}

Utilizzo di caratteri jolly per caricare più di un elemento

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

L'esempio seguente prende come argomento un file denominato classes, che contiene i nomi dei file .java da compilare. Quindi, carica qualsiasi .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"
            ]
        }
    }
}

Utilizzo delle variabili di sostituzione nella località del bucket

Puoi usare la sostituzione variabili per specificare una cartella all'interno del bucket Cloud Storage. Se la cartella specificato non esiste, Cloud Build lo creerà per te.

L'esempio seguente carica gli artefatti in un percorso Cloud Storage che include il nome del progetto Google Cloud 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