Cloud Workstations ti consente di creare e utilizzare immagini personalizzate per le tue workstation. Una volta utilizzata un'immagine personalizzata, è utile automatizzare la ricompilazione dell'immagine personalizzata per incorporare 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.
Prepara l'ambiente
Prima di procedere, assicurati di impostare le seguenti variabili di ambiente.
Imposta l'ID progetto per il progetto cloud che prevedi di utilizzare:
PROJECT_ID=$PROJECT_ID
Imposta il nome utente GitHub in cui prevedi di archiviare il repository:
GITHUB_USER=$GITHUB_ID
Imposta le variabili
PROJECT_NUMBER
eREGION
da utilizzare durante la procedura: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, vedi Località di Cloud Workstations.
Crea un repository Artifact Registry
In questo tutorial utilizzi Artifact Registry per archiviare e scansionare le immagini.
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.
Configura Docker in modo che utilizzi le credenziali della CLI
gcloud
quando accedi ad Artifact Registry.gcloud auth configure-docker $REGION-docker.pkg.dev
Per disattivare l'Artifact Analysis, esegui questo comando:
gcloud services disable containerscanning.googleapis.com
Configura il repository GitHub
In pratica, mantieni il Dockerfile per le tue immagini personalizzate in un repository Git. Il processo automatizzato accede a questo 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 definizioni di container, segui questi passaggi:
- Fai clic su questo link per
creare un nuovo fork
del repository
software-delivery-workshop
. - Se richiesto, accedi a GitHub.
- Seleziona il tuo nome utente GitHub come proprietario. Il nome del repository viene visualizzato come
software-delivery-workshop
. - Fai clic su Crea fork e attendi qualche secondo il completamento della procedura.
Connetti Cloud Build a GitHub
Successivamente, connetti il repository a Cloud Build utilizzando la funzionalità di connessione a GitHub integrata. Fai clic sul link al repository GitHub e segui le istruzioni per completare la procedura. Non è necessario creare il trigger nell'ultimo passaggio della procedura guidata e puoi saltare gli ultimi passaggi perché puoi farlo in un secondo momento dalla riga di comando.
Se utilizzi una soluzione di repository Git diversa, puoi anche seguire le istruzioni per connettere Cloud Build a GitLab o 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 crei un trigger 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 CLI
gcloud
crea un trigger manuale in Cloud Build denominatocustom-image-trigger
, come indicato dal flagname
nella seconda riga. - Le tre righe successive contengono flag relativi al repository GitHub di origine:
- Percorso del repository
- Tipo di repository
- Ramo Git da creare
- Il flag
build-config
indica il percorso del file Cloud Build nel repository Git. Per rendere dinamico il job, utilizza il flag
substitutions
. Per questo job, il comando passa le seguenti variabili:- Regione,
$_REGION
- Nome del repository Artifact Registry,
$_AR_REPO_NAME
- Nome dell'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.
- Regione,
Dopo la creazione del trigger, viene recuperato il nome univoco del trigger e archiviato nella variabile di ambiente
$TRIGGER_ID
per un utilizzo successivo.
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 Cloud Build con una frequenza impostata. Per questo tutorial, il job viene eseguito ogni giorno. In pratica, imposta questa opzione su una frequenza in linea con le esigenze della tua organizzazione per assicurarti che siano sempre inclusi gli aggiornamenti più recenti.
Concedi un ruolo richiesto al account di servizio predefinito per richiamare il trigger Cloud Build:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/cloudbuild.builds.editor"
Concedi un ruolo richiesto al 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"
Crea il job Cloud Scheduler con il seguente comando:
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
Il job è impostato per essere eseguito una volta al giorno. Tuttavia, per testare la funzionalità immediatamente, esegui il job manualmente da Cloud Scheduler:
- Nella pagina Cloud Scheduler, trova la voce appena creata denominata run-build.
- Nella colonna Azioni, fai clic sul menu delle opzioni more_vertAltro per quella riga.
- Fai clic su Forza esecuzione job per testare il sistema manualmente.
Una volta eseguito correttamente il comando, passa alla pagina della cronologia di Cloud Build per esaminare l'avanzamento:
Esamina i risultati
Poiché hai abilitato l'API Container Scanning nell'ambito della procedura di configurazione, Artifact Registry analizza automaticamente le immagini per rilevare vulnerabilità di sicurezza.
Per esaminare le vulnerabilità:
Apri la pagina Repository Artifact Registry:
Nell'elenco dei repository, fai clic su un repository.
Fai clic sul nome di un'immagine. I totali delle vulnerabilità per ogni digest dell'immagine vengono visualizzati nella colonna Vulnerabilità.
Per visualizzare l'elenco delle vulnerabilità di 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à.