Automatizza le ricostruzioni delle immagini container per sincronizzare gli aggiornamenti delle immagini di base


Cloud Workstations consente di creare e utilizzare immagini personalizzate per le tue workstation. Dopo aver utilizzato un'immagine personalizzata, è utile automatizzare una rigenerazione dell'immagine personalizzata in modo da inserire le correzioni e gli aggiornamenti disponibili nelle immagini di base.

In questo tutorial imparerai a creare una pipeline automatizzata per assicurarti di includere aggiornamenti e patch di sicurezza nelle immagini delle workstation personalizzate.

Obiettivi

Seguendo questo tutorial, creerai una pipeline automatizzata per l'immagine di base con questi passaggi:

  1. Crea un repository Artifact Registry per archiviare e scansionare l'immagine personalizzata.
  2. Configura GitHub con Google Cloud per archiviare le configurazioni delle tue immagini.
  3. Creare un trigger di Cloud Build per automatizzare la creazione e il deployment di immagini personalizzate in Artifact Registry.
  4. Configura Cloud Scheduler per avviare le build a intervalli regolari.
  5. Esamina i risultati dei processi automatizzati.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Abilita le API Artifact Registry, API Container Scanning, Cloud Build e Cloud Scheduler.

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  7. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  8. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  9. Abilita le API Artifact Registry, API Container Scanning, Cloud Build e Cloud Scheduler.

    Abilita le API

  10. Installa Google Cloud CLI.
  11. Per initialize gcloud CLI, esegui questo comando:

    gcloud init

Prepara l'ambiente

Prima di procedere, assicurati di impostare le variabili di ambiente seguenti.

  1. Imposta l'ID per il progetto cloud che intendi utilizzare:

    PROJECT_ID=$PROJECT_ID
    
  2. Imposta il nome utente GitHub dove prevedi di archiviare il repository:

    GITHUB_USER=$GITHUB_ID
    
  3. Imposta le variabili PROJECT_NUMBER e REGION da utilizzare durante il processo:

    PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
        --format='value(projectNumber)')
    
    REGION=$REGION
    

    Nell'esempio precedente, sostituisci $REGION con il nome della regione che prevedi di utilizzare, ad esempio us-central1.

    Per ulteriori informazioni sulle regioni disponibili, consulta la pagina relativa alle località di Cloud Workstations.

Crea un repository Artifact Registry

In questo tutorial utilizzerai Artifact Registry per archiviare e analizzare le immagini.

  1. Crea un repository con il seguente comando:

    gcloud artifacts repositories create custom-images \
          --repository-format=docker \
          --location=$REGION \
          --description="Docker repository"
    

    Sostituisci $REGION con il nome della regione che prevedi di utilizzare.

  2. Configura Docker in modo che utilizzi le tue credenziali dell'interfaccia a riga di comando gcloud quando accedi ad Artifact Registry.

    gcloud auth configure-docker $REGION-docker.pkg.dev
    

    Per disattivare Artifact Analysis, esegui questo comando:

    gcloud services disable containerscanning.googleapis.com
    

Configura il tuo repository GitHub

In pratica, mantieni il Dockerfile per le tue immagini personalizzate in un repository Git. Il processo automatizzato accede al repository durante il processo di compilazione per estrarre le configurazioni e il Dockerfile pertinenti.

Crea un fork del repository di esempio

Per creare un fork di un repository di esempio che fornisce le definizioni dei container, segui questi passaggi:

  1. Fai clic su questo link per creare un nuovo fork del repository software-delivery-workshop.
  2. Se richiesto, accedi a GitHub.
  3. Seleziona il tuo nome utente GitHub come proprietario. Il nome del repository viene visualizzato come software-delivery-workshop.
  4. Fai clic su Crea fork e attendi qualche secondo per il completamento del processo.

Connetti Cloud Build a GitHub

Quindi, connetti il repository a Cloud Build utilizzando la funzionalità di connessione GitHub integrata. Fai clic sul link al repository GitHub e segui le istruzioni per completare il processo. Non è necessario creare il trigger nell'ultimo passaggio della procedura guidata e puoi saltare gli ultimi passaggi perché puoi farlo in seguito dalla riga di comando.

Se utilizzi un'altra soluzione del repository Git, puoi anche seguire le istruzioni per connettere Cloud Build a GitLab o a Bitbucket.

crea un trigger di Cloud Build

Il repository di esempio contiene una definizione di container e una configurazione di Cloud Build utilizzata per creare l'immagine container. In questo passaggio creerai un trigger di Cloud Build che esegue le istruzioni nel file cloudbuild.yaml che puoi trovare nella cartella labs/cloudbuild-scheduled-jobs/code-oss-java.

gcloud builds triggers create manual \
    --name=custom-image-trigger \
    --repo=$GITHUB_USER/software-delivery-workshop \
    --repo-type=GITHUB \
    --branch=main \
    --build-config=labs/cloudbuild-scheduled-jobs/code-oss-java/cloudbuild.yaml \
    --substitutions=_REGION=$REGION,_AR_REPO_NAME=custom-images,_AR_IMAGE_NAME=code-oss-java,_IMAGE_DIR=labs/cloudbuild-scheduled-jobs/code-oss-java

TRIGGER_ID=$(gcloud builds triggers list \
    --filter=name="custom-image-trigger" --format="value(id)")

Questo esempio configura quanto segue:

  • Il comando dell'interfaccia a riga di comando gcloud crea un attivatore manuale all'interno di Cloud Build denominato custom-image-trigger, come indicato dal flag name sulla seconda riga.
  • Le tre righe successive contengono flag relativi al repository GitHub di origine:
  • Il flag build-config indica il percorso del file Cloud Build nel repository Git.
  • Per rendere il job dinamico, utilizza il flag substitutions. Per questo job, il comando trasmette le seguenti variabili:

    • Regione, $_REGION
    • Nome repository Artifact Registry, $_AR_REPO_NAME
    • Nome immagine container, $_AR_IMAGE_NAME
    • Posizione del Dockerfile da creare, $_IMAGE_DIR

    Visualizza il file cloudbuild.yaml per vedere come vengono utilizzate queste variabili nel processo.

  • Dopo la creazione, il nome univoco del trigger viene recuperato e archiviato nella variabile di ambiente $TRIGGER_ID per un utilizzo futuro.

Configura Cloud Scheduler

Per assicurarti che le tue immagini siano aggiornate con gli aggiornamenti e le patch più recenti, utilizza Cloud Scheduler per eseguire il trigger di Cloud Build su una frequenza impostata. Per questo tutorial, il job viene eseguito ogni giorno. In pratica, imposta questa frequenza su una frequenza in linea con le esigenze della tua organizzazione per assicurarti che gli aggiornamenti più recenti siano sempre inclusi.

  1. Concedi un ruolo obbligatorio all'account di servizio predefinito per richiamare il trigger di Cloud Build:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/cloudbuild.builds.editor"
    
  2. Concedi un ruolo richiesto all'account di servizio Cloud Build per caricare immagini in Artifact Registry:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role="roles/artifactregistry.admin"
    
  3. Crea il job Cloud Scheduler con il comando seguente:

    gcloud scheduler jobs create http run-build \
        --schedule='0 1 * * *' \
        --uri=https://cloudbuild.googleapis.com/v1/projects/$PROJECT_ID/locations/global/triggers/$TRIGGER_ID:run \
        --location=us-central1 \
        --oauth-service-account-email=$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --oauth-token-scope=https://www.googleapis.com/auth/cloud-platform
    
  4. Il job è impostato per l'esecuzione una volta al giorno; tuttavia, per testare la funzionalità immediatamente, esegui il job manualmente da Cloud Scheduler:

    Vai a Cloud Scheduler

    1. Nella pagina Cloud Scheduler, individua la voce appena creata, denominata run-build.
    2. Nella colonna Azioni, fai clic sul menu opzioni more_vertAltro per quella riga.
    3. Fai clic su Forza esecuzione di un job per testare il sistema manualmente.
    4. Una volta eseguito correttamente il comando, passa alla pagina della cronologia di Cloud Build per esaminare l'avanzamento:

      Vai alla cronologia di Cloud Build

Esaminare i risultati

Poiché hai abilitato l'API Container Scanning durante il processo di configurazione, Artifact Registry analizza automaticamente le immagini per rilevare eventuali vulnerabilità di sicurezza.

Per esaminare le vulnerabilità:

  1. Apri la pagina dei repository di Artifact Registry:

    Vai a Repository Artifact Registry

  2. Nell'elenco dei repository, fai clic su un repository.

  3. Fai clic sul nome di un'immagine. I totali delle vulnerabilità per ogni digest immagine vengono visualizzati nella colonna Vulnerabilità.

    Pagina dei repository di Artifact Registry che mostra un nome di immagine di esempio

  4. Per visualizzare l'elenco delle vulnerabilità per un'immagine, fai clic sul link nella colonna Vulnerabilità. L'elenco delle vulnerabilità mostra la gravità, la disponibilità di una correzione e il nome del pacchetto che contiene la vulnerabilità.

    Pagina Vulnerabilità di Artifact Registry che mostra un elenco di esempio di vulnerabilità

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, assicurati di eliminare le risorse che non ti servono più.

Per eliminare un progetto Google Cloud dalla console Google Cloud o dall'interfaccia a riga di comando gcloud:

Console

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

gcloud

    Elimina un progetto Google Cloud:

    gcloud projects delete PROJECT_ID

Per ulteriori informazioni sull'eliminazione di altre risorse, ad esempio cluster di workstation, configurazioni di workstation e workstation, consulta Eliminare risorse.

Passaggi successivi