La mise en œuvre de CI d’intégration continue et de déploiement continu (CD) sur un monorepo est assez complexe en raison de la diversité des responsabilités multiples entre les développeurs et de la nécessité de coordonner plusieurs packages. Cet article présente les avantages d’un monorepo intégré à un pipeline CI/CD. Il teste et déploie une telle application à l’aide de Travis CI.
Dans le article précédent discutant des tests unitaires, nous avons utilisé Moka et Devrait.js pour créer des tests unitaires. Ils ont été exécutés sur notre machine locale. L’intégration continue est la pratique consistant à automatiser l’exécution de plusieurs tâches, y compris l’exécution des tests unitaires, chaque fois qu’un commit est poussé vers un référentiel Git distant. Le pipeline CI/CD exécutant les tests fournit des retours, aide à l’intégration des fonctionnalités et automatise le déploiement des nouvelles versions.
Cet article fait partie d’une série relative aux bonnes pratiques JS monorepos :
Exécution de tous les tests en même temps
La lerna run
La commande est pratique lorsqu’il s’agit d’exécuter la même commande Yarn ou NPM sur tous les packages qu’elle gère. La lerna run test
exécute le test
commande de chaque package lors de son enregistrement.
UN test
script à la racine package.json
fichier enregistre le yarn test
commande:
"scripts":
"postinstall": "husky install",
"test": "lerna run test"
Activation CI/CD entre GitHub et Travis CI
Le dépôt du projet utilisé pour illustrer la série d’articles est hébergé sur GitHub. Cet article intègre le projet avec une plateforme CI/CD pour automatiser l’exécution des tests et publier les nouvelles versions sur le registre des MNP.
La plateforme CI/CD est Travis CI. Travis était gratuit pour tous les projets open source sans aucune limitation. Cependant, après une acquisition récente et l’objectif d’augmenter les bénéfices (pas de jugement ici), cette offre a été restreinte. Depuis fin 2020, Travis CI propose désormais un plan gratuit pour les dépôts privés et open source, mais il est limité à 10 000 crédits. Pour en savoir plus sur les tarifs de Travis CI, consultez notre leurs projets.
Vous pouvez choisir plusieurs plates-formes CI/CD. Nous avons choisi Travis parce que nous l’utilisons depuis longtemps et pour la qualité et la simplicité de la plateforme. Les étapes présentées ci-dessous sont similaires pour la solution alternative. Dans un article de suivi, nous obtiendrons les mêmes résultats avec les actions GitHub.
Pour utiliser Travis CI, vous n’avez pas besoin de créer de compte, connectez-vous simplement avec votre compte GitHub. Une fois connecté, rendez-vous sur votre page des paramètres où vos référentiels sont synchronisés depuis GitHub. Si vous ne trouvez pas votre référentiel, cliquez sur le bouton « Synchroniser le compte » sous votre nom. Vous allez maintenant pouvoir retrouver votre repository et l’activer.
Pour indiquer comment exécuter les tests sur la plate-forme, Travis CI recherche un .travis.yml
fichier à la racine du projet. Notre dossier est simple :
language: node_js
node_js:
- '14'
cache:
yarn: true
directories:
- "node_modules"
script:
- yarn test
La yarn test
sur Travis CI est déclenché une fois que nous avons poussé le changement à distance sur GitHub :
echo '!.travis.yml' >> .gitignore
git add .gitignore .travis.yml package.json
git commit -m "build: travis activation"
git push
À la fin, l’écran Travis CI informe du succès de l’exécution.
Communiquer sur le statut du CI
Vous pouvez insérer un badge Travis CI sur votre fichier readme ou à un autre emplacement. Il indique l’état de votre build actuel :
<a href="https://travis-ci.org/#!/adaltas/remark-gatsby-plugins">
<img src="https://api.travis-ci.org/adaltas/remark-gatsby-plugins.svg" alt="Build Status" />
</a>
Dans Markdown, le badge ressemble à :
[](https://travis-ci.org/#!/adaltas/remark-gatsby-plugins)
Exécuter Travis CI localement avec Docker
Vous pouvez obtenir un environnement entièrement reproductible de votre environnement Travis Docker. Il y a quelques semaines, nous partageons des instructions détaillées pour recréer le même conteneur Travis Docker sur votre ordinateur local.
Livraison continue
Les tests sont maintenant exécutés sur chaque build. En supposant qu’une nouvelle version est présente dans le commit actuel, nous pouvons émettre le lerna publish
commande depuis la plate-forme CI/CD.
Avec Lerna, nous pouvons utiliser à la fois le lerna publish from-package
et lerna publish from-git
commandes. Je trouve que le deuxième est meilleur. Il recherche la balise de version dans le commit actuel. S’il est présent, il extrait la version et publie une nouvelle version sur un registre NPM.
Considérons notre package prêt à être diplômé et le cycle d’avant-première existe. Par exemple, nous voulons que notre title-to-frontmatter
forfait pour obtenir son diplôme 1.0.0-alpha.3
à 1.0.0
.
Travis CI doit d’abord être configuré pour déployer le package. Modifier le travis.yml
en ajoutant:
before_deploy:
- echo "//registry.npmjs.org/:_authToken=\$NPM_TOKEN" >> $HOME/.npmrc 2> /dev/null
deploy:
provider: script
script: "yarn run publish"
on:
node: "14"
tags: true
La on
La propriété est de conditionner l’exécution du déploiement à la version de Node.js, au cas où nous testerions plusieurs versions, et la présence de balises dans le commit actuel. Le déploiement se produit uniquement lorsque toutes les conditions sont remplies.
La provider
et script
les propriétés indiquent l’utilisation de la commande personnalisée yarn run publish
pour déployer notre package. La package.json
le fichier est mis à jour pour refléter la dernière commande :
"scripts":
"postinstall": "husky install", "publish": "lerna publish from-git --yes",
"test": "lerna run test"
Commitons les modifications :
git commit -a -m 'build: publish script'
Le déploiement d’un package sur le registre NPM nécessite des informations d’identification de l’utilisateur. Bien sûr, nous ne voulons pas partager nos informations d’identification sur un référentiel public. Même sur un référentiel privé, vous ne stockerez jamais d’informations sensibles telles que des mots de passe, des secrets et des certificats. Au lieu de cela, nous utilisons des variables d’environnement configurées dans Travis CI. L’avantage des variables d’environnement lorsqu’elles sont bien déclarées, elles n’ont pas à apparaître dans les fichiers journaux.
La NPM_TOKEN
la valeur est obtenue à partir de votre Compte MNP. Allez sur la page “Access Tokens” et cliquez sur “Générer un nouveau jeton”. Dans la liste, sélectionnez le type “Publier”. NPM déclare que le jeton “Automation” est “adapté aux flux de travail CI/CD”, mais cela n’a tout simplement pas fonctionné pour moi. Je pense que c’est parce que 2FA n’est pas encore activé sur mon compte.
Copiez la valeur et collez-la dans la section “Paramètres > Variables d’environnement” du projet dans Travis CI :
Le projet a un nouveau deploy
l’instruction et la NPM_TOKEN
la variable à l’intérieur est enregistrée dans Travis CI. Nous sommes maintenant prêts à déployer la nouvelle version. La lerna version
commande offre la --conventional-graduate
drapeau:
lerna version --conventional-commits --conventional-graduate
info cli using local version of lerna
lerna notice cli v3.22.1
lerna info versioning independent
lerna WARN conventional-graduate all packages
lerna info Graduating all prereleased packages
lerna info Looking for changed packages since [email protected]
lerna info ignoring diff in paths matching [ '**/test/**' ]
lerna info getChangelogConfig Successfully resolved preset "conventional-changelog-angular"
Changes:
- gatsby-remark-title-to-frontmatter: 1.0.0-alpha.3 => 1.0.0
- gatsby-caddy-redirects-conf: 0.1.0-alpha.3 => 0.1.0
? Are you sure you want to create these versions? Yes
lerna info execute Skipping releases
lerna info git Pushing tags...
lerna success version finished
Les packages sont maintenant officiellement disponibles pour la communauté.
Aide-mémoire
- Ajouter un
test
script à la racinepackage.json
fichier enregistre leyarn test
commande:"scripts": "postinstall": "husky install", "test": "lerna run test"
- Créer un
.travis.yml
fichier à la racine du projet pour indiquer comment exécuter les tests sur la plateforme :language: node_js node_js: - '14' cache: yarn: true directories: - "node_modules" script: - yarn test
- Validez les modifications :
echo '!.travis.yml' >> .gitignore git add .gitignore .travis.yml package.json git commit -m "build: travis activation" git push
- Ajoutez le badge au fichier README.md :
[](https://travis-ci.org/#!/adaltas/remark-gatsby-plugins)
- Pour déployer le package, modifiez le
.travis.yml
en ajoutant:before_deploy: - echo "//registry.npmjs.org/:_authToken=\$NPM_TOKEN" >> $HOME/.npmrc 2> /dev/null deploy: provider: script script: "yarn run publish" on: node: "14" tags: true
- Ajouter un script au
package.json
:"scripts": "postinstall": "husky install", "publish": "lerna publish from-git --yes", "test": "lerna run test"
- Validez les modifications :
git commit -a -m 'build: publish script'
- La
NPM_TOKEN
valeur obtenue à partir de la page NPM “Access Tokens”. Sélectionnez le jeton « Publier » ou le jeton « Automatisation » si 2FA est activé. Copiez la valeur et collez-la dans la section “Paramètres > Variables d’environnement” du projet dans Travis CI.
Conclusion
Nous avons expliqué comment implémenter un flux de travail d’intégration continue dans votre monorepo à l’aide de Travis CI, ainsi que comment créer un processus de travail de livraison continue pour déployer votre package sur le registre NPM.
Récemment, Travis CI Soulève des questions de la communauté open source sur l’avenir de son support open source. Cela fait suite à leur récente annonce concernant les modifications des prix de Travis CI. En réponse, ils ont assuré que “des ressources sont disponibles pour tous les développeurs et équipes ainsi que des améliorations des performances globales et de la stabilité de la plateforme”. Mais ce n’est tout simplement pas ce qui se passe. Par exemple, les pipelines CI/CD de nos projets open source ont démarré avec quelques heures de retard. Pour autant que tout le monde puisse le dire, ils offrent des minutes gratuites dans des attributions mensuelles fixes. Il n’y a qu’un certain nombre de minutes au total qu’ils sont prêts à donner. Ces changements ont été initiés en 2019 lorsque Travis CI a été acquis par Idera, une société de capital-investissement. Il reste cependant une excellente plateforme pour les projets non open source.
Dans le prochain article, nous couvrons CI/CD à l’aide de GitHub Actions, un outil qui facilite l’automatisation des workflows logiciels.
More Stories
Test des écouteurs Jabra Elite 5 ANC : superbe design, bon son
La filiale londonienne du CWU dit aux ingénieurs de BT de rejeter l’offre de rémunération
Revue du générateur solaire Jackery Explorer 1500 : la protection contre les pannes de courant à son meilleur