Monorepos JS en prod 7 : Intégration continue et déploiement continu avec GitHub Actions

Monorepos JS en prod 7 : Intégration continue et déploiement continu avec GitHub Actions

Vous appréciez notre travail......nous recrutons !

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 :

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.

Build status success

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é).

npm new token

npm token list

Copiez la valeur et collez-la dans Paramètres > Secrets > Nouveau secret du dépôt GitHub de votre projet.

Github add secret

Une nouvelle entrée est créée.

Github view secret

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 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
  • 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.
    cat ~/.npmrc | egrep '^//registry.npmjs.org' | sed 's/.*=//'
    Copiez la valeur et collez-la dans 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.

Partagez cet article

Canada - Maroc - France

Nous sommes une équipe passionnée par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Science le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.

Support Ukrain