Monorepos JS en prod 7 : Intégration continue et déploiement continu avec GitHub Actions
6 avr. 2022
- Catégories
- DevOps & SRE
- Front End
- Tags
- CI/CD
- Monorepo
- Node.js
- Tests unitaires
Ne ratez pas nos articles sur l'open source, le big data et les systèmes distribués, fréquence faible d’un email tous les deux mois.
La valeur d’une CI/CD réside dans sa capacité à contrôler et à coordonner les changements et l’ajout de fonctionnalités dans plusieurs versions itératives tout en ayant simultanément plusieurs services activement développés en parallèle. Dans l’article précédent de cette série, nous avons montré comment mettre en œuvre l’intégration continue à l’aide de Travis CI. Dans cet article, nous illustrons comment obtenir le même résultat en utilisant une autre solution d’intégration continue, GitHub Actions.
Cet article s’inscrit dans notre série sur les bonnes pratiques à mener pour concevoir un monorepos en JavaScript :
- Partie 1 : initialisation du projet
- Partie 2 : gestion des versions et de la publication
- Partie 3 : messages de commit et génération du changelog
- Partie 4 : tests unitaires
- Partie 5 : fusion de plusieurs dépôts Git et préservation des commits
- Partie 6 : CI/CD, intégration et déploiement continus avec Travis CI
- Partie 7 : CI/CD, intégration et déploiement continus avec GitHub Actions
Création d’un premier workflow CI avec GitHub et GitHub Actions
GitHub Actions vous permet d’automatiser, de personnaliser et d’exécuter vos workflows de développement logiciel directement depuis votre dépôt GitHub. Les actions GitHub sont pilotées par les événements, ce qui signifie que vous pouvez exécuter une série de commandes après qu’un événement spécifié se soit produit. Par exemple, chaque fois que quelqu’un envoie un commit à une branche, vous exécutez automatiquement tous les tests unitaires associés à la branche. Vous n’avez besoin que d’un dépôt GitHub existant pour créer et exécuter un workflow avec GitHub Actions.
A la racine de votre dépôt, créez un nouveau fichier dans le répertoire .github/workflows
nommé node.js.yml
. Ensuite, copiez le contenu YAML suivant dans le fichier node.js.yml
.
name: Node.js CI
on: push
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '14.x'
- run: yarn
- run: yarn run test
Examinons de plus près ce que fait réellement ce workflow et de quoi il est composé :
- events : activités qui déclenchent le workflow. Ils sont représentés par la propriété
on
. Dans notre cas, tout Git push sur n’importe quelle branche déclenchera ce workflow ; - jobs : ensemble d’étapes qui s’exécutent sur le même runner. Ici, nous n’exécutons que des tests unitaires ;
- steps : tâches pouvant exécuter des commandes dans un job. Notre workflow est composé de plusieurs étapes :
- clone le dépôt distant ;
- configurer une version spécifique de NodeJS (14 dans notre cas) ;
- installer les dépendances ;
- exécuter des tests unitaires.
- actions : commandes qui sont combinées en étapes pour créer une tâche. Par exemple,
run
exécute des commandes shell. La propriétéuses
obtient les actions par défaut définies dans ce dépôt et les exécute.
La validation du fichier de workflow dans votre dépôt déclenche l’événement push
et exécute votre workflow.
Consulter les résultats de votre workflow
Sur votre référentiel GitHub, cliquez sur l’onglet Actions. Cliquez sur le workflow dans la barre latérale gauche. Vous pouvez voir l’état de votre workflow ainsi que des logs détaillés de son exécution.
Livraison continue avec GitHub Actions
Maintenant que vous avez configuré des tests automatisés sur chaque version, vous souhaiterez peut-être automatiser les déploiements. Comme expliqué dans l’article précédent, la commande lerna publish from-git
est pratique si vous souhaitez déployer facilement vos packages.
Créez un nouveau fichier dans le dossier .github/workflows
appelé publish.yml
. Importez le code suivant dans le fichier.
name: Node.js CD
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.x'
registry-url: 'https://registry.npmjs.org'
- run: yarn
- run: yarn publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Le workflow ci-dessus s’exécute lorsque l’événement release
se déclenche. Le workflow publie le package dans le registre npm si les tests de la CI réussissent. Pour effectuer des opérations authentifiées sur le registre npm depuis votre workflow, vous devez stocker votre jeton d’authentification npm en tant que secret. Si vous avez déjà publié par le passé depuis votre machine, la valeur NPM_TOKEN
doit être obtenu depuis votre fichier .npmrc
local et rapporté dans les paramètres de votre projet. Extrayez vos informations d’identification npm :
cat ~/.npmrc | egrep '^//registry.npmjs.org' | sed 's/.*=//'
Sinon, vous pouvez accéder au site Web du registre npm et générer un nouveau jeton manuellement (recommandé).
Copiez la valeur et collez-la dans Paramètres > Secrets > Nouveau secret
du dépôt GitHub de votre projet.
Une nouvelle entrée est créée.
Ce flux de travail s’appuie sur les outils Node.js existants pour simplifier le processus de publication dans le registre NPM. Votre package est maintenant disponible pour toute la communauté Open Source.
Aide-mémoire
- A la racine de votre dépôt, créez un nouveau fichier dans le répertoire
.github/workflows
nomménode.js.yml
. Ensuite, copiez le contenu YAML suivant dans le fichiernode.js.yml
.name: Node.js CI on: push jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: '14.x' - run: yarn - run: yarn run test
- Créez un nouveau fichier dans le dossier
.github/workflows
appelépublish.yml
. Copiez le code suivant dans le fichier.name: Node.js CD on: release: types: [created] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '14.x' registry-url: 'https://registry.npmjs.org' - run: yarn - run: yarn publish env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- Obtention de la valeur
NPM_TOKEN
.Copiez la valeur et collez-la danscat ~/.npmrc | egrep '^//registry.npmjs.org' | sed 's/.*=//'
Paramètres > Secrets > Nouveau secret de référentiel
dans le référentiel GitHub.
Conclusion
Une CI/CD utilisant GitHub Actions propose des workflows qui build du code dans votre dépôt et exécutent très facilement des tests unitaires. Vous pouvez publier votre travail dans un registre dans le cadre de votre workflow d’intégration continue. Nous appliquons le même processus pour déployer les sites internets de nos projets aussi. GitHub Actions est disponible avec toutes les offres GitHub. Avec GitHub Free pour les comptes utilisateurs, vous avez accès à 2 000 minutes GitHub Actions, ce qui est suffisant pour la plupart des projets Open Source.