Automatisez les recompilations d'images de conteneurs pour synchroniser les mises à jour des images de base


Cloud Workstations vous permet de créer et d'utiliser des images personnalisées pour vos stations de travail. Une fois qu'une image personnalisée est utilisée, il est utile d'automatiser sa recompilation afin d'intégrer les correctifs et les mises à jour disponibles pour les images de base.

Dans ce tutoriel, vous allez apprendre à créer un pipeline automatisé pour vous assurer d'inclure les mises à jour et les correctifs de sécurité dans les images personnalisées de votre poste de travail.

Objectifs

En suivant ce tutoriel, vous allez créer un pipeline automatisé pour votre image de base:

  1. Créez un dépôt Artifact Registry pour stocker et analyser votre image personnalisée.
  2. Configurez GitHub avec Google Cloud pour stocker les configurations de votre image.
  3. Créez un déclencheur Cloud Build pour automatiser la création et le déploiement d'images personnalisées dans Artifact Registry.
  4. Configurez Cloud Scheduler pour lancer des compilations régulièrement.
  5. Examinez les résultats des processus automatisés.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activer les API Artifact Registry, l'API Container Scanning, Cloud Build et Cloud Scheduler.

    Activer les API

  5. Installez Google Cloud CLI.
  6. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  7. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  8. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  9. Activer les API Artifact Registry, l'API Container Scanning, Cloud Build et Cloud Scheduler.

    Activer les API

  10. Installez Google Cloud CLI.
  11. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init

Préparer l'environnement

Avant de continuer, assurez-vous de définir les variables d'environnement suivantes.

  1. Définissez l'ID du projet Cloud que vous prévoyez d'utiliser:

    PROJECT_ID=$PROJECT_ID
    
  2. Définissez le nom d'utilisateur GitHub où vous prévoyez de stocker votre dépôt:

    GITHUB_USER=$GITHUB_ID
    
  3. Définissez les variables PROJECT_NUMBER et REGION à utiliser tout au long du processus:

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

    Dans l'exemple précédent, remplacez $REGION par le nom de la région que vous prévoyez d'utiliser (par exemple, us-central1).

    Pour en savoir plus sur les régions disponibles, consultez la page Emplacements Cloud Workstations.

Créer un dépôt Artifact Registry

Dans ce tutoriel, vous allez utiliser Artifact Registry pour stocker et analyser vos images.

  1. Créez un dépôt à l'aide de la commande suivante:

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

    Remplacez $REGION par le nom de la région que vous prévoyez d'utiliser.

  2. Configurez Docker pour qu'il utilise vos identifiants de CLI gcloud lorsque vous accédez à Artifact Registry.

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

    Pour désactiver Artifact Analysis, exécutez la commande suivante:

    gcloud services disable containerscanning.googleapis.com
    

Configurer votre dépôt GitHub

En pratique, vous conservez le Dockerfile de vos images personnalisées dans un dépôt Git. Le processus automatisé accède à ce dépôt pendant le processus de compilation afin d'extraire les configurations et le Dockerfile pertinents.

Dupliquer l'exemple de dépôt

Pour dupliquer un exemple de dépôt qui fournit des définitions de conteneur, procédez comme suit:

  1. Cliquez sur ce lien pour créer une duplication du dépôt software-delivery-workshop.
  2. Si vous y êtes invité, connectez-vous à GitHub.
  3. Sélectionnez votre nom d'utilisateur GitHub en tant que propriétaire. Le nom du dépôt s'affiche sous la forme software-delivery-workshop.
  4. Cliquez sur Create fork (Créer une fourchette) et attendez quelques secondes que le processus se termine.

Connecter Cloud Build à GitHub

Connectez ensuite ce dépôt à Cloud Build à l'aide de la fonctionnalité de connexion GitHub intégrée. Cliquez sur le lien vers le dépôt GitHub et suivez les instructions expliquant comment terminer le processus. Vous n'avez pas besoin de créer le déclencheur à la dernière étape de l'assistant et vous pouvez ignorer les dernières étapes, car vous pouvez le faire plus tard à partir de la ligne de commande.

Si vous utilisez une autre solution de dépôt Git, vous pouvez également suivre les instructions pour connecter Cloud Build à GitLab ou Bitbucket.

Créer un déclencheur Cloud Build

L'exemple de dépôt contient une définition de conteneur et une configuration Cloud Build permettant de créer l'image du conteneur. Au cours de cette étape, vous allez créer un déclencheur Cloud Build qui exécute les instructions du fichier cloudbuild.yaml, que vous trouverez dans le dossier 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)")

Cet exemple configure les éléments suivants:

  • La commande de CLI gcloud crée un déclencheur manuel dans Cloud Build nommé custom-image-trigger, comme indiqué par l'option name sur la deuxième ligne.
  • Les trois lignes suivantes contiennent des indicateurs liés au dépôt GitHub source :
  • L'option build-config indique le chemin d'accès au fichier Cloud Build dans le dépôt Git.
  • Pour rendre la tâche dynamique, utilisez l'option substitutions. Pour cette tâche, la commande transmet les variables suivantes:

    • Région, $_REGION
    • Nom du dépôt Artifact Registry, $_AR_REPO_NAME
    • Nom de l'image du conteneur, $_AR_IMAGE_NAME
    • Emplacement du Dockerfile à compiler, $_IMAGE_DIR

    Affichez le fichier cloudbuild.yaml pour voir comment ces variables sont utilisées dans le processus.

  • Une fois le déclencheur créé, son nom unique est récupéré et stocké dans la variable d'environnement $TRIGGER_ID pour une utilisation ultérieure.

Configurer Cloud Scheduler

Pour vous assurer que vos images sont à jour avec les dernières mises à jour et correctifs, utilisez Cloud Scheduler pour exécuter le déclencheur Cloud Build à une fréquence définie. Pour ce tutoriel, la tâche s'exécute tous les jours. En pratique, définissez une fréquence adaptée aux besoins de votre organisation pour vous assurer que les dernières mises à jour sont toujours incluses.

  1. Attribuez un rôle requis au compte de service par défaut pour appeler le déclencheur Cloud Build:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/cloudbuild.builds.editor"
    
  2. Attribuez un rôle requis au compte de service Cloud Build pour importer des images dans Artifact Registry:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
        --role="roles/artifactregistry.admin"
    
  3. Créez la tâche Cloud Scheduler à l'aide de la commande suivante:

    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. La tâche est configurée pour s'exécuter une fois par jour. Toutefois, pour tester la fonctionnalité immédiatement, exécutez la tâche manuellement à partir de Cloud Scheduler:

    Accéder à Cloud Scheduler

    1. Sur la page Cloud Scheduler, recherchez l'entrée que vous venez de créer et appelée run-build.
    2. Dans la colonne "Actions", cliquez sur le menu d'options more_vertPlus pour cette ligne.
    3. Cliquez sur Forcer l'exécution d'un job pour tester le système manuellement.
    4. Une fois la commande exécutée, accédez à la page de l'historique Cloud Build pour suivre la progression:

      Accéder à l'historique Cloud Build

Étudier les résultats

Étant donné que vous avez activé l'API Container Scanning lors du processus de configuration, Artifact Registry analyse automatiquement les images pour détecter d'éventuelles failles de sécurité.

Pour examiner les failles:

  1. Ouvrez la page des dépôts Artifact Registry:

    Accéder aux dépôts Artifact Registry

  2. Dans la liste des dépôts, cliquez sur un dépôt.

  3. Cliquez sur le nom d'une image. Le nombre total de failles pour chaque condensé d'image s'affiche dans la colonne Vulnerabilities (Failles).

    Page des dépôts Artifact Registry affichant un exemple de nom d'image

  4. Pour afficher la liste des failles d'une image, cliquez sur le lien dans la colonne Vulnerabilities (Failles). La liste des failles indique la gravité, la disponibilité d'un correctif et le nom du package contenant la faille.

    Page "Failles" d'Artifact Registry avec un exemple de liste de failles

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, veillez à ne pas oublier de supprimer les ressources dont vous n'avez plus besoin.

Pour supprimer un projet Google Cloud de la console Google Cloud ou de la CLI gcloud :

Console

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

gcloud

    Supprimez un projet Google Cloud :

    gcloud projects delete PROJECT_ID

Pour en savoir plus sur la suppression d'autres ressources, telles que les clusters de stations de travail, les configurations de stations de travail et les stations de travail, consultez la section Supprimer des ressources.

Étapes suivantes