GitHub a une fonctionnalité appelée GitHub Actions qui exécute des builds automatiques, des tests et d'autres scripts chaque fois que vous apportez des modifications à un référentiel. Un cas d'utilisation pratique consiste à créer et à transférer automatiquement des conteneurs Docker vers un registre de conteneurs.
Nouveau registre de conteneurs de GitHub
Le nouveau registre de conteneurs de GitHub, appelé GitHub Container Registry, est un peu différent de la plupart des registres comme Docker Hub. Il fonctionne comme une extension de GitHub Packages, un système de stockage de packages qui associe les packages à leurs référentiels de code source. Les packages peuvent être créés et poussés à partir du référentiel, souvent automatiquement à l'aide d'un pipeline GitHub Actions.
GitHub Container Registry ajoute simplement une compatibilité spécifique à Docker aux packages GitHub, ce qui le fait fonctionner comme un registre de conteneurs à des fins d'exécution de docker pull
et d'autres commandes CLI.
Vous n'avez pas besoin de publier sur le registre de conteneurs de GitHub. Vous pouvez toujours publier sur Docker Hub à partir d'une action avec une certaine configuration. Les actions prédéfinies fonctionnent avec GHCR dès le départ, donc c'est beaucoup plus simple à configurer.
Comment configurer des builds automatiques pour les packages GitHub
Pour commencer, vous aurez besoin d'un référentiel. Même si vous ne publiez que des packages, vous aurez toujours besoin d'un référentiel, car le format de GHCR est le suivant :
ghcr.io/username/repository/image:version
Configurez un référentiel, puis cliquez sur "Actions" pour créer une nouvelle action. Sous "Plus de workflows d'intégration continue", cliquez sur "Publier le conteneur Docker".
Cela génère un modèle de démarrage, qui nécessite quelques modifications pour fonctionner. Tout d'abord, le IMAGE_NAME
la variable doit être remplacée par le nom de votre image.
Ensuite, à la ligne 39, vous trouverez où il se connecte à GHCR.
run: echo "${{ secrets.CR_PAT }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
Actuellement, le seul schéma d'authentification pris en charge est les jetons d'accès personnels (PAT), ce qui n'est pas idéal pour la sécurité car ils accordent un accès à l'ensemble du compte. GitHub le sait et travaille sur un meilleur correctif pour l'avenir, mais en attendant, si vous souhaitez utiliser GHCR à partir d'un flux de travail GitHub Actions, vous devrez stocker un PAT dans les secrets de votre référentiel, car il suffit évidemment de coller ce serait horrible ici.
Tout d'abord, vous devrez vous rendre dans Paramètres> Paramètres du développeur> Jetons d'accès personnels et créer un nouveau jeton. Ce jeton a besoin de write:packages
et delete:packages
réglages. Notez que pour une raison quelconque, la sélection de packages d'écriture sélectionne automatiquement "Contrôle total des référentiels", que vous devez décocher.
Ensuite, rendez-vous dans les paramètres du référentiel et créez un nouveau secret appelé CR_PAT
, pour correspondre à l'action.
Revenez à l'action et cliquez sur "Démarrer la validation" pour la pousser vers le référentiel.
Une fois validé, il déclenchera un flux de travail pour exécuter et créer le package. Vous pouvez surveiller l'état de tous les workflows en cours d'exécution sous l'onglet "Actions". Ici, cela a échoué car les actions par défaut s'attendent à ce qu'il y ait des tests à exécuter, ce que cette image n'avait pas.
Une fois l'opération réussie, vous devriez voir le conteneur dans le registre, sous "Packages" sur la page principale du référentiel ou sous les packages de votre profil.