Invia una build utilizzando l'interfaccia a riga di comando e l'API

Questa pagina descrive come avviare manualmente una build in Cloud Build utilizzando Google Cloud CLI e l'API Cloud Build.

Prima di iniziare

Autorizzazioni IAM richieste

Per ottenere le autorizzazioni necessarie per inviare le build, chiedi all'amministratore di concederti i seguenti ruoli IAM nel tuo account di servizio:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Esecuzione delle build

Puoi specificare l'origine della build utilizzando il campo Origine build. Il campo Origine build è uno dei seguenti: storage_source, repo_source, git_source e connected_repository.

Inviare build con storage_source

gcloud

Utilizzando un Dockerfile:

Il file Dockerfile contiene tutte le informazioni necessarie per creare un'immagine Docker utilizzando Cloud Build.

Per eseguire il build utilizzando un Dockerfile, esegui il seguente comando dalla directory contenente il codice sorgente e il Dockerfile:

gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME

Dove:

  • LOCATION: la posizione regionale o multiregionale del repository Docker in Artifact Registry.
  • PROJECT_ID: il tuo ID progetto Google Cloud .
  • REPOSITORY: il nome del repository Artifact Registry.
  • IMAGE_NAME: il nome dell'immagine del contenitore da compilare.

Il nome completo dell'immagine da creare è LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME. Le immagini sottoposte a push ad Artifact Registry utilizzano la convenzione di denominazione di Artifact Registry.

Il comando gcloud builds submit:

  • comprime il codice dell'applicazione, Dockerfile, e tutti gli altri asset nella directory corrente come indicato da ..
  • avvia una compilazione nella posizione LOCATION utilizzando i file caricati come input.
  • etiqueta l'immagine utilizzando il nome fornito.
  • esegue il push dell'immagine compilata in Artifact Registry.

Man mano che la compilazione procede, l'output viene visualizzato nella finestra della shell o del terminale. Al termine della compilazione, dovresti vedere un output simile al seguente:

    DONE
    ---------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION STATUS
    $BUILD_ID                             2023-10-28T15:21:18+00:00  12S      SUCCESS

dove $BUILD_ID è l'identificatore univoco della build.

Utilizzo del file di configurazione della build di Cloud Build:

Per inviare una build utilizzando la configurazione di compilazione, esegui il seguente comando:

    gcloud builds submit --config BUILD_CONFIG SOURCE

Dove:

  • BUILD_CONFIG è il percorso del file di configurazione della build.
  • SOURCE è il codice sorgente del percorso o dell'URL.

Quando esegui gcloud builds submit per la prima volta in un progetto Google Cloud , Cloud Build crea un bucket Cloud Storage denominato [YOUR_PROJECT_NAME]_cloudbuild in quel progetto. Cloud Build utilizza questo bucket per archiviare qualsiasi codice sorgente che potresti utilizzare per le tue build. Cloud Build non elimina automaticamente i contenuti di questo bucket. Per eliminare gli oggetti che non utilizzi più per le compilazioni, puoi configurare il ciclo di vita nel bucket o eliminare manualmente gli oggetti.

Il seguente comando mostra come inviare una richiesta di compilazione cloudbuild.yaml utilizzando il codice sorgente archiviato in un bucket Cloud Storage.

    gcloud builds submit --config cloudbuild.yaml \
        gs://BUCKET/SOURCE.tar.gz

Dove:

  • BUCKET è il nome del bucket in Cloud Storage contenente il codice sorgente da compilare.
  • SOURCE è il nome del file del codice sorgente compresso.

Puoi utilizzare . per specificare che il codice sorgente si trova nella directory di lavoro corrente:

    gcloud builds submit --config=cloudbuild.yaml .

API

Per inviare la richiesta di compilazione utilizzando curl:

  1. Crea un file denominato request.json con i seguenti contenuti:

    {
        "source": {
            "storageSource": {
                "bucket": "BUCKET",
                "object": "SOURCE.tar.gz"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                "."
            ]
        }],
        "images": [
            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
        ]
    }
    

    Dove:

    • BUCKET è il nome del bucket Cloud Storage contenente il codice sorgente da compilare.
    • SOURCE è il nome del file del codice sorgente compresso.
    • IMAGE_NAME è il nome dell'immagine da compilare.
    • LOCATION: la posizione regionale o multiregionale del repository Docker in Artifact Registry.
    • PROJECT_ID: il tuo ID progetto Google Cloud .
    • REPOSITORY: il nome del repository Docker in Artifact Registry.

    In questa richiesta di compilazione, Cloud Build chiama il dockerpassaggio di compilazione con gli argomenti build -t LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY ..

    Il nome completo dell'immagine da creare è LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY.

    Le immagini sottoposte a push ad Artifact Registry utilizzano la convenzione di denominazione di Artifact Registry.

  2. Esegui il seguente comando, dove PROJECT_ID è il tuo ID progettoGoogle Cloud e REGION è una delle regioni supportate:

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/builds
    

    In questo comando, curl invia request.json in una chiamata POST all'endpoint builds per il metodo dell'API projects.builds.create.

    Il comando mostra i dettagli sulla compilazione nella finestra della shell o del terminale. L'output è una risposta JSON e ha il seguente aspetto:

        {
            "name": "operations/build/$PROJECT-ID/NmZhZW...",
            "metadata": {
                "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
                "build": {
                    "id": $BUILD-ID,
                    "status": "QUEUED",
                    "source": {
                        "storageSource": {
                            "bucket": "BUCKET",
                            "object": "SOURCE.tar.gz"
                        }
                    },
                    "createTime": "2017-05-12T18:58:07.341526Z",
                    "steps": [
                    {
                        "name": "gcr.io/cloud-builders/docker",
                        "args": [
                            "build",
                            "-t",
                            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                            "."
                        ]
                    }
                    ],
                    "timeout": "600s",
                    "images": [
                        "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
                    ],
                    "projectId": $PROJECT-ID,
                    "logsBucket": "gs://...",
                    "sourceProvenance": {
                        "resolvedStorageSource": {
                            "bucket": "BUCKET",
                            "object": "SOURCE.tar.gz"
                            "generation": "..."
                        }
                    },
                    "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=$PROJECT_ID"
                }
            }
        }
    

    La risposta JSON è modellata utilizzando la risorsa Operation nell'API Cloud Build. Il campo metadata viene modellato utilizzando la risorsa Build. Lo stato QUEUED indica che la compilazione è in attesa di esecuzione.

Inviare build con connected_repository

gcloud

Per eseguire una richiesta di compilazione con l'origine della compilazione da una risorsa del repository di 2ª generazione, esegui il seguente comando:

gcloud builds submit REPOSITORY --revision=REVISION --config=BUILD_CONFIG LOCATION 

Dove:

  • LOCATION è la posizione regionale o multiregionale del tuo repository Docker in Artifact Registry.
  • REPOSITORY è il nome del repository Cloud Build 2ª gen., formattato come projects/*/locations/*/connections/*repositories/*.
  • REVISION è la revisione da recuperare dal repository Git, ad esempio un branch, un tag, un commit SHA o qualsiasi riferimento Git.
  • BUILD_CONFIG è il percorso del file di configurazione della build.

Man mano che la compilazione procede, l'output viene visualizzato nella finestra della shell o del terminale. Al termine della compilazione, dovresti visualizzare un output simile al seguente:

    DONE
    ---------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION STATUS
    $BUILD_ID                             2023-10-28T15:21:18+00:00  12S      SUCCESS

dove $BUILD_ID è l'identificatore univoco della build.

gcloudignore: quando includi il codice sorgente per la compilazione, il comando precedente carica tutti i file nella directory specificata nella compilazione Google Cloud. Se vuoi escludere determinati file dalla directory, puoi includere un file denominato .gcloudignore nella directory di caricamento di primo livello. I file specificati verranno ignorati. Se .gcloudignore non è presente nella directory di caricamento di primo livello, ma è presente un file .gitignore, la gcloud CLI genera un file .gcloudignore compatibile con Git che rispetta i file .gitignore modificati. Per saperne di più, consulta la documentazione di gcloudignore.

Se non hai codice sorgente da passare alla build, utilizza il flag --no-source dove BUILD_CONFIG è il percorso del file di configurazione della build:

    gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY

API

Per inviare la richiesta di compilazione utilizzando curl:

  1. Crea un file denominato request.json con i seguenti contenuti:

    {
        "source": {
            "connectedRepository": {
                "repository": "REPOSITORY",
                "revision": "REVISION"
            }
        },
        "steps": [{
            "name": "gcr.io/cloud-builders/docker",
            "args": [
                "build",
                "-t",
                "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                "."
            ]
        }],
        "images": [
            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
        ]
    }
    

    Dove:

    • REPOSITORY è il nome del repository Cloud Build 2ª gen., formattato come projects/*/locations/*/connections/*repositories/*.
    • REVISION è la revisione da recuperare dal repository Git, ad esempio un branch, un tag, un commit SHA o qualsiasi riferimento Git.
    • IMAGE_NAME è il nome dell'immagine da compilare.
    • LOCATION: la posizione regionale o multiregionale del repository Docker in Artifact Registry.
    • PROJECT_ID: il tuo ID progetto Google Cloud .

    In questa richiesta di compilazione, Cloud Build chiama il dockerpassaggio di compilazione con gli argomenti build -t LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME ..

    Il nome completo dell'immagine da creare è LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME. Le immagini sottoposte a push ad Artifact Registry utilizzano la convenzione di denominazione di Artifact Registry.

  2. Esegui il seguente comando, dove PROJECT_ID è il tuo ID progettoGoogle Cloud e REGION è una delle regioni supportate:

    curl -X POST -T request.json -H "Authorization: Bearer $(gcloud config config-helper \
        --format='value(credential.access_token)')" \
        https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/builds
    

    In questo comando, curl invia request.json in una chiamata POST all'endpoint builds per il metodo dell'API projects.builds.create.

    Il comando mostra i dettagli sulla compilazione nella finestra della shell o del terminale. L'output è una risposta JSON e ha il seguente aspetto:

        {
            "name": "operations/build/$PROJECT-ID/NmZhZW...",
            "metadata": {
                "@type": "type.googleapis.com/google.devtools.cloudbuild.v1.BuildOperationMetadata",
                "build": {
                    "id": $BUILD-ID,
                    "status": "QUEUED",
                    "source": {
                        "connectedRepository": {
                            "repository": "REPOSITORY",
                            "revision": "REVISION"
                        }
                    },
                    "createTime": "2017-05-12T18:58:07.341526Z",
                    "steps": [
                    {
                        "name": "gcr.io/cloud-builders/docker",
                        "args": [
                            "build",
                            "-t",
                            "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME",
                            "."
                        ]
                    }
                    ],
                    "timeout": "600s",
                    "images": [
                        "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE_NAME"
                    ],
                    "projectId": PROJECT_ID,
                    "logsBucket": "gs://...",
                    "sourceProvenance": {
                        "resolvedConnectedRepository": {
                            "repository": "REPOSITORY",
                            "revision": "REVISION.tar.gz"
                            "generation": "..."
                        }
                    },
                    "logUrl": "https://console.cloud.google.com/cloud-build/builds/...?project=PROJECT_ID"
                }
            }
        }
    

    La risposta JSON è modellata utilizzando la risorsa Operation nell'API Cloud Build. Il campo metadata viene modellato utilizzando la risorsa Build. Lo stato QUEUED indica che la compilazione è in attesa di esecuzione.

Passaggi successivi