Ce qui est Nx et pourquoi il importe pour le développement moderne

Nx est un système de construction et de développement open-source créé par Nrwl. Il aide les équipes à gérer monorepos avec des centaines ou des milliers de projets en fournissant des constructions incrémentales intelligentes, calculant le cache, visualisation graphique de dépendance, et génération de code. Contrairement aux simples coureurs de tâches, Nx comprend les dépendances entre les projets et peut déterminer exactement ce qui doit être reconstruit ou retesté quand un changement se produit.

La plateforme prend en charge des cadres populaires tels que Angular, React, Next.js, NestJS et Node.js, et offre un riche écosystème de plugins. Nx fonctionne au niveau de l'espace de travail, il impose des outils cohérents, des bibliothèques partagées et des meilleures pratiques entre les équipes sans sacrifier la flexibilité.

Outils de collaboration basés sur le cloud : un aperçu

Les outils de collaboration basés sur le cloud fournissent une plateforme centralisée pour le contrôle des versions, l'examen des codes, le suivi des problèmes et l'IC/CD.

  • GitHub – La plus grande plateforme open-source, offrant des actions GitHub pour CI/CD, des paquets GitHub et des workflows de révision de code avancés.
  • GitLab – Une plateforme complète DevOps avec CI/CD intégré, registre de conteneurs, et une interface unifiée pour le suivi des problèmes et wiki.
  • Bitbucket – Populaire parmi les équipes utilisant des produits Atlassiens, une intégration étroite avec Jira et Trello, et des pipelines intégrés pour CI/CD.
  • Azure DevOps – Microsoft offre, offre Azure Repos, Azure Pipelines, Azure Boards, et l'intégration avec l'écosystème d'Azure.

Ces outils partagent des caractéristiques communes : requêtes de tirage, protections de branche, webhooks et API REST. Cependant, chacun a des forces uniques. GitHub excelle dans la communauté et les actions; GitLab brille dans un cycle DevOps mono-application; Bitbucket s'intègre profondément à Jira; Azure DevOps offre un couplage étroit avec les services Azure pour les déploiements d'entreprise.

Pourquoi intégrer Nx avec les plateformes de collaboration Cloud ?

Combiner Nx avec un outil de collaboration basé sur le cloud permet de débloquer des avantages qui vont au-delà du contrôle de la version de base. Les principaux avantages sont les suivants:

  • Construits et tests incrémentiels en temps réel dans CI – Nx peut réutiliser les sorties en cache sur les circuits CI, de sorte que seuls les projets touchés sont reconstruits ou retestés.
  • Saisine automatique du graphique de dépendance – Lorsqu'un développeur pousse un changement, Nx sait quelles bibliothèques dépendent de ce changement et peut limiter la portée de l'IC en conséquence.
  • Exécution locale et distante constante – Les développeurs exécutent les mêmes commandes localement que dans CI, éliminant les problèmes de --works sur ma machine.
  • Révision améliorée du code[ – Nx génère des graphiques de dépendance explicites et des ensembles de changements, aidant les évaluateurs à comprendre l'impact d'une PR sans deviner.
  • Governance monorepo évolutive – Les plateformes Cloud appliquent les politiques de branche et les vérifications requises; Nx s'assure que ces vérifications sont rapides et précises.
  • Amélioration de la visibilité[ – Les registres des pipelines, les registres des artefacts et les délais de construction sont stockés dans le nuage, ce qui les rend vérifiables et partageables entre les équipes.

Comment intégrer Nx avec les outils de collaboration Cloud

Étape 1: Configurez votre dépôt de nuage

Choisissez une plateforme de collaboration en nuage et créez un nouveau dépôt. Pour un monorepo, vous initialiserez probablement le dépôt avec un qui exclut , et des dossiers de cache Nx ([ ou ). Assurez-vous que les règles de protection des branches sont définies sur les branches principales pour exiger des examens de requêtes et des vérifications d'état.

Étape 2: Configurez votre espace de travail Nx pour vous connecter au dépôt

Si vous avez déjà un espace de travail Nx, vous pouvez le relier à un dépôt distant en utilisant . Pour les nouveaux projets, utilisez les générateurs de projet Nx. Après la création, poussez le commit initial. Il est important de permettre à Nx Cloud (Nx="s own distant caching service) de partager des artefacts de construction entre les membres de l'équipe et les coureurs de CI. Le niveau gratuit couvre généralement les petites équipes, tandis que les plans payés s'étendent pour l'utilisation de l'entreprise.

Configurez votre espace de travail fichier pour définir les pipelines de tâches, les règles de mise en cache et les seuils affectés.

{
 "tasksRunnerOptions": {
 "default": {
 "runner": "nx/tasks-runners/default",
 "options": {
 "cacheableOperations": ["build", "test", "lint", "e2e"],
 "accessToken": "…",
 "canTrackAnalytics": false
 }
 }
 }
}

Remplacer le par un tableau de bord généré à partir de Nx Cloud. Cette étape est essentielle pour que le cache à distance fonctionne efficacement dans les environnements locaux et CI.

Étape 3 : Créer des pipelines CI/CD pour les essais et déploiements automatisés

Chaque plateforme cloud a sa propre syntaxe pour définir les pipelines CI, mais la logique de base reste la même : exécutez , , et en option en fonction des fichiers modifiés dans la branche. Le pipeline doit installer des dépendances, configurer Nx (y compris l'authentification à Nx Cloud), puis exécuter les commandes concernées.

Voici des exemples de plateformes typiques.

Actions GitHub

Créer :

name: CI
on:
 push:
 branches: [main]
 pull_request:
jobs:
 main:
 runs-on: ubuntu-latest
 steps:
 - uses: actions/checkout@v3
 with:
 fetch-depth: 0
 - uses: actions/setup-node@v3
 with:
 node-version: 18
 cache: 'npm'
 - run: npm ci
 - uses: nrwl/nx-set-shas@v3
 - run: npx nx workspace-lint
 - run: npx nx format:check
 - run: npx nx affected --target=lint --parallel=3
 - run: npx nx affected --target=test --parallel=3 --ci --code-coverage
 - run: npx nx affected --target=build --parallel=3

L'action garantit que Nx compare la plage de commit correcte. Sans elle, Nx pourrait penser que tous les projets sont affectés.

GitLab CI

Créer :

image: node:18
stages:
 - setup
 - lint
 - test
 - build
before_script:
 - npm ci
 - npx nx sync-deps
setup:
 stage: setup
 script:
 - echo "Environment ready"
lint:
 stage: lint
 script:
 - npx nx affected:lint --parallel=3
test:
 stage: test
 script:
 - npx nx affected:test --parallel=3 --ci --code-coverage
build:
 stage: build
 script:
 - npx nx affected:build --parallel=3
 artifacts:
 paths:
 - dist/

Pour utiliser la cache à distance Nx Cloud dans GitLab, exposez la comme variable d'environnement CI.

Pipelines à bitbucket

Créer :

image: node:18
pipelines:
 pull-requests:
 '**':
 - step:
 name: Lint, Test, and Build
 caches:
 - node
 script:
 - npm ci
 - npx nx affected:lint --parallel=3
 - npx nx affected:test --parallel=3 --ci --code-coverage
 - npx nx affected:build --parallel=3

Azure DevOps

Utilisez un fichier :

trigger:
 - main
pr:
 branches:
 include:
 - '*'
pool:
 vmImage: 'ubuntu-latest'
steps:
 - task: NodeTool@0
 inputs:
 versionSpec: '18.x'
 - script: npm ci
 displayName: 'Install dependencies'
 - script: npx nx affected --target=lint --parallel=3
 displayName: 'Lint'
 - script: npx nx affected --target=test --parallel=3 --ci --code-coverage
 displayName: 'Test'
 - script: npx nx affected --target=build --parallel=3
 displayName: 'Build'

Réglez comme une variable de pipeline.

Étape 4: Utilisez Webhooks ou API Intégrations pour Trigger Builds

La plupart des outils de collaboration en nuage déclenchent déjà des pipelines automatiquement sur les événements de requête de poussée ou de traction. Cependant, vous pouvez vouloir affiner les déclencheurs : par exemple, sauter CI pour des modifications de documentation seulement, ou exécuter une compilation complète seulement lors de la fusion vers le principal. Nx peut aider en détectant les projets touchés avant que le pipeline complet ne tourne. Certaines équipes mettent en œuvre un pré-emploi qui exécute pour déterminer quelles applications doivent être déployées, puis exécute des étapes de déploiement conditionnellement.

Étape 5 : Surveiller et optimiser le flux de travail

Après l'intégration, consultez les statistiques du pipeline : durée moyenne, taux de frappe du cache et fréquence de défaillance. Nx Cloud fournit un tableau de bord qui montre l'utilisation du cache et la distribution des tâches. Ajuster les règles de cache, augmenter le parallélisme ou ajouter le cache à distance si le taux de frappe du cache baisse.

Meilleures pratiques pour la collaboration Nx + Cloud

  • Utilisez un dépôt unique de la vérité – Conservez tous les codes et configurations dans le monorepo. Évitez de diviser les fichiers de configuration entre plusieurs dépôts pour éviter la dérive.
  • Adopt conventionnel commits[ – Utilisez des préfixes comme , , pour faciliter les notes de sortie et la version. Des outils comme peuvent être intégrés avec Nx et Cloud CI.
  • Conserver des espaces de travail bien structurés – Utiliser des générateurs Nx pour créer des projets cohérents. Définir dans pour imposer des contraintes de dépendance (p. ex., -apps ne peut pas importer d'autres applications).
  • S'assurer que les portes de qualité du code – Utiliser des règles de lintage, des vérifications de formatage () et des vérifications de type dans CI. Ces étapes peuvent se dérouler en parallèle, mais être attentives à l'affectation des ressources.
  • Cache agressivement – Activer la mise en cache à distance (Nx Cloud) non seulement pour les constructions mais aussi pour les tests. Assurez-vous que la liste inclut toutes les opérations déterministes.
  • Set up branch policys – Exiger des vérifications de statut du pipeline CI, faire appliquer l'historique linéaire et limiter les poussées directes vers le principal. Nx peut aider en générant une liste de projets touchés pour la description PR.
  • Document workflows – Créer un qui explique comment configurer le dépôt, exécuter des commandes Nx et interpréter les échecs de CI. Inclure des liens vers la documentation Nx et l'outil Cloud.
  • – Beaucoup d'outils cloud chargent des minutes de construction. Nx réduit les minutes en sautant des projets non affectés. En outre, utilisez des coureurs auto-organisés si vous avez des commits à haute fréquence.

Défis potentiels et comment les surmonter

L'intégration n'est pas sans obstacles. Voici des questions et des solutions communes:

  • Long initial IC runs – La première exécution après la mise en place de cache à distance sera lente car aucun cache n'existe. Utilisez un CI de semence exécuté sur la branche principale pour peupler le cache, ou exécutez une compilation complète manuellement.
  • Cache invalidation – Si les builds ne sont pas déterministes (p. ex., timestamps, variables d'environnement), le cache peut être réutilisé incorrectement. Assurez-vous que vos commandes build sont des fonctions pures d'entrées (code source et configuration).
  • Profondeur de la branche dans la caisse – Nx exige l'historique complet Git pour calculer les projets touchés. Assurez-vous de vérifier avec ou un drapeau similaire.
  • Securité de jeton d'accès[ – Stocker et autres secrets comme variables chiffrées dans la plate-forme CI/CD, et non dans le dépôt.
  • Complexité de la puce – Au fur et à mesure que le monorepo grandit, le pipeline peut devenir lent même avec Nx.

Cas d'utilisations réelles dans le monde

Les grandes organisations bénéficient déjà de cette intégration. Par exemple, une société de fintech utilisant Nx avec GitLab a réduit le temps de CI de 45 minutes à moins de 5 minutes pour la plupart des demandes de tirage. Ils ont réussi en permettant à distance de cacher et de faire des tests affectés seulement. Une autre équipe utilisant GitHub Actions et Nx ont réduit leur taux de défaillance de déploiement de 70% parce que les PR incluent maintenant des annotations de graphique de dépendance automatique, aidant les évaluateurs à attraper des effets secondaires imprévus.

Une startup SaaS est passée de dépôts séparés à un monorepo Nx intégré avec Bitbucket Pipelines, coupant le développeur à bord de deux jours à deux heures et réduisant de moitié le nombre de conflits de fusion.

Considérations en matière de sécurité

Lors de l'intégration de Nx avec les outils cloud, la sécurité doit être abordée:

  • Audits de la dépendance[ – Exécuter ou dans IC pour attraper des vulnérabilités connues.
  • Gestion des secrets – Ne jamais commettre de secrets. Utilisez la plate-forme cloud , le magasin secret (p. ex., GitHub Secrets, GitLab CI Variables). Pour le développement local, utilisez les fichiers listés dans .
  • Isolation de l'environnement de construction[ – IC court dans des conteneurs éphémères; toutefois, si vous utilisez des coureurs auto-portés, assurez-vous qu'ils sont patchés et isolés.
  • Attaques de chaînes supplémentaires – Pin versions de dépendance dans les fichiers de paquet-lock et envisager d'utiliser npm=s hachages d'intégrité. Nx=s cache peut par inadvertance propager un artefact compromis, il est donc sage d'appliquer les commits signés et de revoir les modifications aux fichiers de configuration.

Conseils pour l'optimisation des performances

Pour tirer le meilleur parti des gains de vitesse de Nx , CI :

  • Paralléliser les machines – Si votre monorepo a de nombreux projets, utilisez Nx Agents ou une exécution de tâches distribuée similaire pour exécuter simultanément des tâches sur plusieurs machines CI.
  • Optimiser la mémoire de Node.js – Utilisez pour prévenir les erreurs hors mémoire lors de grandes constructions.
  • Utiliser explicitement – Dans les files de fusion ou les configurations complexes de CI, spécifier manuellement la branche de base peut empêcher les calculs de diff incorrects.
  • Réduisez la fragmentation des essais[ – Groupez les essais de petites unités en un seul projet si possible. Nx peut les exécuter en parallèle, mais trop de petits projets ajoutent des frais généraux.
  • Cache node modules – Les plateformes Cloud CI permettent la mise en cache de . Utilisez-le pour sauter sur chaque course à moins que ne change.

Ressources extérieures

Pour plus de détails, consulter:

Intégrer Nx aux outils de collaboration basés sur le cloud est un geste stratégique qui accélère le développement, renforce la cohérence et l'échelle avec votre équipe. En suivant les étapes et les meilleures pratiques décrites ci-dessus, vous pouvez construire un pipeline CI/CD rapide, sécurisé et durable qui exploite toute la puissance de Nx , le cache de calcul intelligent et la collaboration cloud-native. Commencez par un petit projet pilote, mesurez les améliorations, puis élargissez la pratique dans votre organisation.