Skip to main content

Regénération du conteneur dans un codespace

Vous pouvez régénérer le conteneur de développement d'un codespace dans lequel vous travaillez pour appliquer les changements de configuration. De temps à autre, vous souhaiterez peut-être effectuer une regénération complète.

À propos de la régénération d’un conteneur de développement

Lorsque vous travaillez dans un codespace, votre environnement de développement est un conteneur Docker qui s’exécute sur une machine virtuelle. Si vous modifiez la configuration de votre conteneur de développement à partir d'un codespace et souhaitez appliquer ces modifications au codespace actuel, vous devez régénérer le conteneur.

Par défaut, lorsque vous régénérez un conteneur de développement, GitHub Codespaces accélère le processus de génération en réutilisant les images mises en cache lors des précédentes générations du conteneur. C'est généralement le moyen le plus rapide d'implémenter des changements dans la configuration de votre conteneur de développement, pour les raisons suivantes.

  • GitHub Codespaces peut réutiliser les images dans votre cache plutôt que de les récupérer dans les registres des conteneurs.
  • Les parties de la configuration de votre conteneur de développement qui définissent la façon dont le conteneur est généré, par exemple les caractéristiques du conteneur de développement et les instructions Dockerfile, peuvent avoir déjà été implémentées dans les couches d'image de votre cache, ce qui vous évite d'avoir à attendre que ces processus s'exécutent à nouveau. (Cependant, les commandes de votre configuration qui s'exécutent après la génération du conteneur, telles que onCreateCommand, s'exécuteront à nouveau).

Vous souhaiterez parfois effectuer une régénération complète de votre conteneur. Lors d'une régénération complète, GitHub Codespaces nettoie tous les conteneurs, images et volumes Docker du cache, puis régénère votre conteneur avec les nouvelles images extraites. Tous les réglages définis dans votre configuration s'exécuteront à nouveau, générant ainsi de nouvelles couches d'images. Vous pouvez effectuer une régénération complète après de nombreuses itérations de régénération de votre conteneur avec des images mises en cache, dans des situations telles que les suivantes.

  • Vous voulez vous assurer que l'installation définie dans votre configuration ne dépend pas des images mises en cache et qu'elle s'exécutera comme prévu lorsque quelqu'un utilisateur créera un nouveau codespace basé sur la configuration. Par exemple, une dépendance peut avoir été supprimée de l'image de base depuis sa dernière insertion dans votre codespace.
  • Vous voulez libérer l'espace disque utilisé par votre cache, par exemple si vous êtes à court d'espace disque ou si vous voulez minimiser les frais de stockage. Votre cache d'image peut utiliser une quantité importante d'espace disque si vous avez modifié votre image de base plusieurs fois, si vous avez apporté un grand nombre de modifications itératives à votre configuration ou si vous exécutez plusieurs conteneurs avec Docker Compose.

Regénération d’un conteneur

Vous pouvez regénérer un conteneur dans un codespace dans le client web ou l’application de bureau VS Code, ou vous pouvez utiliser GitHub CLI.

Regénération du conteneur de développement dans le client web ou l’application de bureau VS Code

  1. Accédez à VS Code Command Palette en appuyant sur Maj+Commande+P (Mac) ou Ctrl+Maj+P (Windows/Linux).

  2. Commencez à taper « Regénérer », puis sélectionnez Codespaces : regénérer le conteneur ou Codespaces : regénérer le conteneur complètement.

    Capture d’écran de l’option « Codespaces : conteneur complètement prédéfini » dans la palette de commandes.

  3. Si les changements apportés à la configuration de votre conteneur de développement entraînent une erreur de conteneur, votre codespace s’exécute en mode de récupération et vous voyez s’afficher un message d’erreur.

    Capture d’écran d’un message indiquant que le codespace s’exécute en mode de récupération. Sous le message se trouvent les boutons intitulés « Annuler » et « Afficher le journal de création ».

    • Pour diagnostiquer l’erreur en révisant les journaux de création, cliquez sur Afficher le journal de création.
    • Pour corriger les erreurs identifiées dans les journaux, mettez à jour votre fichier devcontainer.json.
    • Pour appliquer les modifications, régénérez votre conteneur.

Utilisation de GitHub CLI pour régénérer un conteneur de développement

Si vous avez changé une configuration de conteneur de développement en dehors de VS Code (par exemple, sur GitHub.com ou dans un IDE JetBrains), vous pouvez utiliser l’GitHub CLI pour regénérer le conteneur de développement d’un codespace existant.

  1. Dans le terminal, entrez la commande suivante.

    gh codespace rebuild
    

    Vos codespaces sont répertoriés.

  2. Utilisez les touches de direction de votre clavier pour mettre en surbrillance l’espace de code requis, puis appuyez sur Entrée.

Pour effectuer une regénération complète avecl’GitHub CLI, vous pouvez utiliser la commande gh codespace rebuild --full.

Persistance des données lors d’une regénération

Quand vous créez un codespace, votre dépôt est cloné dans le répertoire /workspaces de votre codespace. Il s’agit d’un répertoire persistant monté dans le conteneur. Tous les changements que vous faites à l’intérieur de ce répertoire, notamment la modification, l’ajout ou la suppression de fichiers, sont conservés quand vous arrêtez et démarrez le codespace, et quand vous regénérez le conteneur dans le codespace.

En dehors de l’annuaire /workspaces, votre codespace contient une structure d’annuaire Linux qui varie en fonction de l’image conteneur de développeur utilisée pour générer votre codespace. Vous pouvez ajouter des fichiers ou faire des changements dans des fichiers en dehors du répertoire /workspaces : par exemple, vous pouvez installer de nouveaux programmes, ou vous pouvez configurer votre interpréteur de commandes dans un fichier de type ~/.bashrc. Comme utilisateur non racine, vous n’avez peut-être pas automatiquement l’accès en écriture sur certains répertoires, mais la plupart des images autorisent l’accès à la racine de ces répertoires avec la commande sudo.

En dehors de /workspaces, à l’exception du répertoire /tmp, les répertoires d’un codespace sont liés au cycle de vie du conteneur. Cela signifie que toutes les modifications que vous apportées sont conservées quand vous arrêtez et démarrez votre codespace, mais ne sont pas conservés quand vous regénérez le conteneur.

Si vous souhaitez conserver des fichiers en dehors du répertoire /workspaces lors d’une regénération, vous pouvez créer, à l’emplacement souhaité du conteneur, un lien symbolique (symlink) vers le répertoire persistant. Par exemple, dans votre répertoire /workspaces/.devcontainer, vous pouvez créer un répertoire config qui sera conservé lors d’une reconstruction. Vous pouvez ensuite créer un lien symbolique vers le répertoire config et son contenu sous forme de postCreateCommand dans votre fichier devcontainer.json.

{
    "image": "mcr.microsoft.com/devcontainers/base:alpine",
    "postCreateCommand": ".devcontainer/postCreate.sh"
}

Dans l’exemple de fichier postCreate.sh ci-dessous, le contenu du répertoire config est lié symboliquement au répertoire de base.

#!/bin/bash
ln -sf $PWD/.devcontainer/config $HOME/config && set +x

Pour aller plus loin