November 28, 2022

Branches Tech

Engagé pour la qualité technologique

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

5 min read

La valeur de CI/CD réside dans la capacité de contrôler et de 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, Actions GitHub.

Cet article fait partie d’une série relative aux bonnes pratiques JS monorepos :

Créez votre 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 dans votre référentiel 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 référentiel GitHub existant pour créer et exécuter un workflow GitHub Actions.

A la racine de votre repository, créez un nouveau fichier dans le .github/workflows répertoire nommé node.js.yml. Ensuite, copiez le contenu YAML suivant dans le node.js.yml dossier.

name: Node.js CI
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - uses: actions/setup-[email protected]
      with:
        node-version: '14.x'
    - run: yarn
    - run: yarn run test

Examinons de plus près ce que fait réellement ce flux de travail et de quoi il est composé :

  • événements: activités qui déclenchent le workflow. Ils sont représentés par le on propriété. Dans notre cas, toute poussée sur n’importe quelle branche déclenchera ce workflow ;
  • travaux: ensemble d’étapes qui s’exécutent sur le même coureur. Ici, nous n’exécutons que des tests unitaires ;
  • pas: tâche pouvant exécuter des commandes dans un travail. Notre workflow est composé de plusieurs étapes :
    • cloner le référentiel 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 pas créer un travail. Par exemple, run exécute des commandes shell. La uses le mot-clé obtient les actions par défaut définies dans ce référentiel et les exécute.

La validation du fichier de workflow dans votre référentiel déclenche le push événement et exécute votre flux de travail.

Afficher les résultats de votre flux de travail

Sur votre dépôt GitHub, cliquez sur le Actions languette. Cliquez sur le flux de travail dans la barre latérale gauche. Vous pouvez voir l’état de votre flux de travail ainsi que des journaux détaillés de l’exécution.


Construire le statut de réussite

Livraison continue avec les actions GitHub

Maintenant que vous avez configuré des tests automatisés sur chaque build, vous souhaiterez peut-être automatiser les déploiements. Comme expliqué dans l’article précédent, le lerna publish from-git La commande est pratique si vous souhaitez déployer facilement vos packages.

Créez un nouveau fichier dans le .github/workflows dossier appelé publish.yml. Copiez le morceau de code suivant dans le fichier.

name: Node.js CD
on:
  release:
    types: [created]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - uses: actions/setup-[email protected]
      with:
        node-version: '14.x'
        registry-url: 'https://registry.npmjs.org'
    - run: yarn
    - run: yarn publish
      env:
        NODE_AUTH_TOKEN: $ secrets.NPM_TOKEN 

Le flux de travail ci-dessus s’exécute lorsque le release déclencheurs d’événements. Le workflow publie le package sur le registre npm si les tests CI réussissent. Pour effectuer des opérations authentifiées sur le registre npm dans votre flux de travail, vous devez stocker votre jeton d’authentification npm en tant que secret. Si vous avez déjà déployé des packages depuis votre machine, le NPM_TOKEN la valeur peut être lue à partir de votre local .npmrc et signalé 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 nouveau jeton


liste de jetons npm

Copiez la valeur et collez-la dans Settings > Secrets > New repository secret dans le référentiel GitHub.


Github ajoute un secret

Une nouvelle entrée est créée.


Secret de la vue Github

Ce workflow 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 repository, créez un nouveau fichier dans le .github/workflows répertoire nommé node.js.yml. Ensuite, copiez le contenu YAML suivant dans le node.js.yml dossier.
    name: Node.js CI
    on: push
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/[email protected]
        - uses: actions/setup-[email protected]
          with:
            node-version: '14.x'
        - run: yarn
        - run: yarn run test
  • Créez un nouveau fichier dans le .github/workflows dossier appelé publish.yml. Copiez le morceau de code suivant dans le fichier.
    name: Node.js CD
    on:
      release:
        types: [created]
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/[email protected]
        - uses: actions/setup-[email protected]
          with:
            node-version: '14.x'
            registry-url: 'https://registry.npmjs.org'
        - run: yarn
        - run: yarn publish
          env:
            NODE_AUTH_TOKEN: $ secrets.NPM_TOKEN 
  • Obtenir votre NPM_TOKEN.
    cat ~/.npmrc | egrep '^//registry.npmjs.org' | sed 's/.*=//'

    Copiez la valeur et collez-la dans ‘Settings > Secrets > New repository secret’ dans le référentiel GitHub.

Conclusion

CI utilisant GitHub Actions propose des flux de travail qui génèrent du code dans votre référentiel 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. 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.

Leave a Reply