Images personnalisées
Vous pouvez créer une image personnalisée pour définir l’environnement exact que vous Environnements d'exécution plus grands hébergés par GitHub utilisez. Les images personnalisées vous permettent de préinstaller des outils, des dépendances et des configurations pour accélérer les flux de travail et améliorer la cohérence entre les travaux.
Lorsque votre exécuteur utilise une image personnalisée, il agit comme un environnement « préchauffé », ce qui permet aux flux de travail de se terminer plus rapidement, en téléchargeant des packages et des fichiers binaires une fois lors de la création d’images au lieu de chaque exécution d’un flux de travail. Pour plus d’informations sur les images personnalisées, consultez images Runner.
Le processus d’utilisation d’une image personnalisée implique trois étapes principales : 1. Configuration d’un exécuteur de génération d’images : créez une exécuteur plus grand image pour générer et stocker votre image personnalisée. 1. Génération d’une image personnalisée : générez votre image personnalisée en exécutant un workflow à l’aide de l’exécuteur de génération d’images. 1. Installation d’images personnalisées : créez un exécuteur qui utilise votre image personnalisée.
Prerequisites
Avant de pouvoir créer des images personnalisées, vérifiez que les exigences suivantes sont remplies.
-
Stratégie : les images personnalisées doivent être activées pour votre organisation ou votre entreprise. Les propriétaires d’entreprise peuvent gérer l’accès aux images personnalisées et définir des stratégies de rétention dans les paramètres de stratégie Actions. Pour plus d’informations, consultez « Application de stratégies pour GitHub Actions dans votre entreprise ».
-
Autorisations : pour créer et gérer des images personnalisées, vous devez être propriétaire d’une organisation ou d’entreprise, ou avoir le
CI/CD Adminrôle, ou avoir un rôle avec les autorisations affinées suivantes.- Afficher les images personnalisées de runners hébergés d'organisation
- Gérer les images personnalisées de runners hébergés d'organisation
- Gérer les runners hébergés d'organisation et les groupes de runners
Pour plus d’informations, consultez « Autorisations des rôles d’organisation personnalisés ».
Configuration d’un exécuteur de génération d’images
Pour créer une image personnalisée, vous devez d’abord configurer un exécuteur de génération d’images. Lorsque vous créez l’exécuteur, la plateforme que vous sélectionnez pour votre exécuteur doit correspondre à la plateforme de l’image que vous souhaitez générer. La plateforme de l’exécuteur peut être Linux x64, Linux ARM64 ou Windows x64.
- Créez un exécuteur plus grand :
- Pour les organisations, veuillez consulter la section Ajouter un larger runner à une organisation.
- Pour les entreprises, veuillez consulter la section Ajouter un larger runner à une entreprise.
- Lorsque vous configurez l’exécuteur, sélectionnez les configurations suivantes pour votre exécuteur de génération d’images :
- Plateforme : sélectionnez une plateforme prise en charge qui correspond à la plateforme de l’image que vous envisagez de créer (Linux x64, Linux ARM64 ou Windows x64).
- Image : sélectionnez une image à générer, puis activez la case à cocher Activer cet exécuteur pour générer des images personnalisées.
- Vous pouvez commencer à partir d’une image détenue par GitHub ou choisir une image de base pour démarrer avec un système d’exploitation vierge.
- Pour les plateformes ARM64, vous pouvez également sélectionner une image gérée par ARM avec des outils préinstallés.
- Groupe d’exécuteurs : sélectionnez le groupe dont votre exécuteur doit être membre. Une fois l'image personnalisée créée, seuls les runners de ce groupe de runners peuvent générer de nouvelles versions de cette image.
Génération d’une image personnalisée
Après avoir créé un exécuteur de génération d’images, exécutez un workflow qui inclut le snapshot mot clé pour générer une image personnalisée.
Pour configurer un flux de travail pour la génération d’images :
- Définissez la valeur
runs-onsur le nom du runner de génération d'images que vous avez créé. - Ajoutez le
snapshotmot clé au travail, à l’aide de la syntaxe de chaîne ou de la syntaxe de mappage indiquée ci-dessous.- Chaque travail qui inclut le
snapshotmot clé crée une image distincte. Pour générer une seule image ou version d’image, incluez toutes les étapes de flux de travail dans un seul travail. - Chaque exécution réussie d’un travail qui inclut le
snapshotmot clé crée une nouvelle version de cette image.
- Chaque travail qui inclut le
Remarque
GitHub recommande de configurer la génération d’images en tant que flux de travail planifié chaque semaine. Cette approche garantit que les dépendances restent up-to-date et disposent des derniers correctifs de sécurité. Pour plus d’informations, consultez « [AUTOTITLE](/actions/using-workflows/events-that-trigger-workflows#schedule) ».
Il peut prendre un certain temps pour que votre image soit entièrement générée et prête à être utilisée une fois le flux de travail terminé. Le délai d’approvisionnement varie en fonction de la taille et de la configuration du runner, et peut prendre plusieurs heures pour les larger runners.
L’image est générée uniquement lorsque le travail se termine correctement. Cela empêche la création de nouvelles versions d’images lorsqu’un flux de travail échoue ou se termine dans un état incomplet.
Une fois l’image générée, elle est disponible pour être utilisée dans vos flux de travail. Pour plus d’informations sur la gestion des images personnalisées, consultez Gestion des images personnalisées.
Syntaxe de chaîne
Vous pouvez utiliser la syntaxe de chaîne avec snapshot pour définir le nom de l'image. Cette méthode crée une image ou ajoute une nouvelle version à une image existante portant le même nom. Vous ne pouvez pas spécifier un numéro de version à l’aide de cette syntaxe.
jobs:
build:
runs-on: my-image-generation-runner
snapshot: my-custom-image
steps:
# Add any steps to download and setup any dependencies here
Syntaxe de mappage
Vous pouvez utiliser la syntaxe de mappage avec snapshot pour définir à la fois le image-name et l'optionnel version. Lorsque vous spécifiez une version majeure, la version mineure s'incrémente automatiquement si cette version principale existe déjà. Les versions de correctifs ne sont pas prises en charge.
jobs:
build:
runs-on: my-image-generation-runner
snapshot:
image-name: my-custom-image
version: 2.*
steps:
# Add any steps to download and setup any dependencies here
Gestion des versions
Lorsque vous générez des images personnalisées, GitHub attribue automatiquement des numéros de version pour vous aider à gérer les mises à jour et à suivre l’historique des images.
Comportement par défaut
Si une image portant le nom spécifié n’existe pas dans votre organisation ou entreprise, GitHub crée-la avec un numéro de version initial de 1.0.0. Si une image portant le même nom existe déjà, GitHub crée une nouvelle version en incrémentant le numéro de version mineure (par exemple, 1.1.0, 1.2.0, etc.).
Si vous ne spécifiez pas de version dans votre fichier YAML, la génération d’images utilise ce comportement par défaut.
Spécification d’une version dans votre flux de travail
Si vous incluez une version dans le mappage YAML, GitHub vérifiez d’abord le numéro de version principal.
- Si la version principale spécifiée existe déjà, la nouvelle image utilise la version mineure suivante (par exemple, la version 1.0 devient 1.1).
- Si la version principale n’existe pas, GitHub crée une nouvelle version majeure (par exemple, 2.0).
Les versions de correctifs ne sont pas prises en charge.
Dernier tag
La dernière exécution de workflow pour une image est toujours étiquetée comme "latest". Si vous spécifiez une version principale antérieure dans YAML (par exemple, version : 1.* lorsqu’une version 2.0 existe), GitHub génère une nouvelle version mineure sous l’ancienne version principale et la marque comme la plus récente.
Remarque
Exécuteur plus volumineux hébergé par GitHub la création ne prend pas en charge les caractères génériques dans la sélection des versions d'image.
Facturation et stockage pour les images personnalisées
Les tâches qui utilisent des images personnalisées sont facturées au même tarif à la minute que le exécuteur plus grand qui utilise l’image. Le stockage des images personnalisées est facturé séparément via le stockage GitHub Actions.
Si vous régénérez fréquemment des images et conservez des versions antérieures, votre utilisation du stockage peut croître rapidement, car chaque travail de workflow réussi qui inclut le snapshot mot clé crée une nouvelle version d’image. Pour plus d’informations, consultez « Facturation des actions GitHub » et « Application de stratégies pour GitHub Actions dans votre entreprise ».
Gestion des images personnalisées
Vous pouvez afficher des informations détaillées sur chaque image, supprimer des images inutilisées ou des versions spécifiques et suivre les versions d’images au fil du temps.
-
Sur GitHub, accédez à la page principale de l’organisation.
-
Sous le nom de votre organisation, cliquez sur Settings. Si vous ne voyez pas l’onglet « Paramètres », sélectionnez le menu déroulant , puis cliquez sur Paramètres.

-
Dans la barre latérale gauche, cliquez sur Actions, puis cliquez sur Images personnalisées.
-
Dans la page « Images personnalisées », vous pouvez afficher toutes les images personnalisées créées dans votre organisation ou entreprise.
-
Pour afficher des détails sur une image spécifique, cliquez sur le nom de l’image.
Installation d’images personnalisées
Une fois votre image personnalisée prête, vous pouvez l’installer sur un nouveau Exécuteur plus volumineux hébergé par GitHub.
-
Suivez les étapes de création d’un exécuteur plus grand:
- Pour les organisations, veuillez consulter la section Ajouter un larger runner à une organisation.
- Pour les entreprises, veuillez consulter la section Ajouter un larger runner à une entreprise.
-
Lors de la configuration du runner :
- Plateforme : sélectionnez la même plateforme que celle que vous avez utilisée pour générer l’image (Linux x64, Linux ARM64 ou Windows x64).
- Image : sélectionnez l’onglet Personnalisé , puis choisissez votre image personnalisée dans la liste.
- Si vous ne voyez pas votre image, vérifiez que vous avez sélectionné la plateforme appropriée et que vous créez l’exécuteur au même niveau (organisation ou entreprise) où l’image a été générée.
- Version de l'image : choisissez Dernière version pour utiliser automatiquement la version la plus récente, ou sélectionnez un numéro de version spécifique pour épingler le runner à cette version.
- Si vous sélectionnez Dernière version, votre exécuteur est automatiquement mis à jour lorsqu’une nouvelle version de l’image devient disponible. Si vous épinglez le runner à une version spécifique, vous devrez modifier le runner manuellement pour effectuer une mise à niveau ultérieurement.
- Taille : choisissez une taille de runner avec un stockage égal ou supérieur à la taille de votre image. Par exemple, si l’image a été générée sur un exécuteur de 8 cœurs, sélectionnez un 8 cœurs ou plus pour exécuter cette image.
- Groupe d’exécuteurs : affectez l’exécuteur à un groupe d’exécuteurs partagé avec les référentiels qui doivent utiliser cette image.
-
Dans votre GitHub Actions tâche de flux de travail, définissez la
runs-onclé sur le nom de votre exécuteur.jobs: build: runs-on: my-custom-runner steps: # Add any steps for your workflow here -
Exécutez votre flux de travail pour vérifier qu’il se termine correctement. Les journaux des tâches afficheront le nom et la version de l’image dans la section « Configurer la tâche ».
Meilleures pratiques de sécurité pour les images personnalisées
Pour empêcher les modifications non autorisées apportées à vos images, suivez ces bonnes pratiques.
- Utilisez des groupes d’exécuteurs dédiés pour la génération d’images. Les exécuteurs qui génèrent des images de production doivent rester dans un groupe d’exécuteurs dédié. Ne partagez pas de groupes d’exécuteurs entre les référentiels de production et de développement ou de test, car toute personne ayant accès à un dépôt de développement ou de test peut injecter du code malveillant dans une image de production.
- N’autorisez pas les dépôts publics à accéder aux exécuteurs de génération d’images. Limitez les dépôts qui peuvent utiliser des exécuteurs de génération d'images uniquement à ceux qui le nécessitent et examinez régulièrement l'accès.
- Appliquez le privilège minimum aux référentiels. Évitez d’accorder un accès
writeà l’échelle de l’organisation aux référentiels qui ont accès aux runners de génération d’images. Étant donné que les images peuvent être générées à partir de n’importe quelle branche, toute personne disposant d’un accès en écriture peut créer une branche avec du code arbitraire et déclencher la génération d’images.