Utiliser GatsbyJS dans Azure

Mise en contexte

 Avant d'utiliser Azure pour mon blog, je passais par Netlify pour déployer et héberger le blog. Suite à mon nouveau poste d'architecte cloud, je me suis demandé si je ne pouvais pas passer à la plateforme de Microsoft pour réaliser la même chose. Cet article se veut donc un tutoriel sur comment installer GatsbyJS sur Azure et créer un pipeline de développement et de déploiement avec DevOps.

Qu'est-ce que le JAMStack?

 Avant toute chose, qu'est-ce que le JAMStack au juste? C'est une façon de construire des sites statiques en faisant un pré-rendu avant de le servir au browser en utilisant JavaScript, des APIs et un Markup (Tel Markdown). Le stack permet donc de livrer le contenu de façon efficace, plus sécuritaire et avec un coût très bas.

Qu'est-ce que GatsbyJS?

 GatsbyJS est une implentation du JAMStack, dans mon cas, j'utilise Markdown comme source de données, GraphQL pour construire l'API et React pour l'interface :

GatsbyJs

Première étape : Préparer Azure

 Je vais prendre en compte qu'on possède déjà le code pour le site et nous allons regarder exclusivement ce qui touche au déploiement et au pipeline de production.

1. Créer un Azure Storage

 Comme le JAMStack ne nécessite pas de "WebApp", nous pouvons déployer tout simplement dans un Azure Storage. Dans notre cas, un account de type StorageV2 et une réplication LRS est suffisante pour un blog. Il est important de laisser l'accès en mode hot puisqu'on accède fréquemment au data (C'est ce qui compose le site après tout!).

Basic Storage account

2. Activer le Static Website du Azure Storage

 Une fois que le storage aura été créée par Azure, vous pourrez activer le mode Static Website comme-ci dessous :

Static Website

 Il faut changer l'index document name ainsi que l'error document path pour index.html puisque c'est ce que GatsbyJS utilise. La section Primary endpoint correspond à l'URL du nouveau site.

3. Ajouter le site

 Vous avez maintenant probablement un bel écran bleu si vous naviguez à l'URL en question qui indique qu'Azure à réussi à créer votre site! Il suffit de mettre le build donné par GatsbyJS dans le storage nommé $web créé par Azure :

Upload to Azure

 Une fois votre site téléchargé dans le container $web, vous devriez voir votre site!
Une première réussite!

Deuxième étape : DevOps à Azure

 Considérons maintenant qu'on possède un projet DevOps avec un repository qui comprend le code de notre blog. Nous aimerions maintenant qu'il se déploiement automatiquement dans Azure quand on pousse dans la branch master.

1. Construire le pipeline

 La première chose à faire, est de construire le pipeline de build du site pour produire un artefact qui sera déployable sur le container Azure. Dans la section Pipelines, en cliquant sur New Pipeline, on sélectionne Azure Repos Git (YAML) (ou n'importe quel endroit où se trouve votre code), on prend ensuite le repository qui nous intéresse et finalement dans configuration Node.js. Voici le YAML nécessaire pour faire fonctionner GatsyJS :

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: NodeTool@0
  inputs:
    versionSpec: '10.x'
  displayName: 'Install Node.js'

- script: |
    npm install
    npm run build
  displayName: 'npm install and build'

- script: |
    npm install -g gatsby-cli
  displayName: 'install gatsby'

- script: |
    cd gatsby-site
    npm install
    npx gatsby build
  displayName: 'gatsby build'

- task: CopyFiles@2
  inputs:
    sourceFolder: 'public'
    contents: '**' 
    targetFolder: $(Build.ArtifactStagingDirectory)
    cleanTargetFolder: true 
  displayName: 'copy built site'

- task: PublishBuildArtifacts@1
  inputs:
    pathtoPublish: '$(Build.ArtifactStagingDirectory)' 
    artifactName: 'drop' 
    publishLocation: 'Container'

 Une fois le pipeline créé, on peut le tester pour confirmer que le tout roule sans faute.

2. Déployer vers Azure

 Prenons maintenant l'artifact du pipeline plus haut, et copions le dans container $web. Dans la section Releases, New Release Pipeline il faut céer un nouvel Agent Job on sélectionne l'agent pool Azure et dans l'artifact download le résultat du build pipeline :

Artifact

 Une fois l'artifact sélectionner on peut préparer le stage :

Agent Job DevOps

 Ensuite, il faut ajouter un task qui copy le build dans le storage Azure, comme ici bas :

Azure file copy

 Une fois le tout sauvegardé, on peut porter attention à l'artifact pour le déploiement en continue, en l'activant ici :

Azure Continuous deployment trigger

Conclusion

 Finalement, une fois le tout en place, si une modification est apportée dans la branche master de notre repository, un build sera automatiquement lancé et une fois terminé la release se fera et déploiera notre site sur le web!

 L'avantage dans notre cas est qu'un le prix du Azure Storage est relativement très bas, mon blog ne fait même pas 1Gb et si je regarde la calculatrice Azure, je totalise environ 1.49$ par mois pour le storage. Considérant que le pipeline et le repository DevOps est gratuit, je m'en sors relativement très bien!

 Il est à noter qu'il est aussi possible d'utiliser son propre domaine au lieu de celui donné par Azure, le tout sera couvert dans un prochain article.

Yann Trudel

Je m'appel Yann Trudel et je suis consultant en informatique, j'écris ici mes réflexions, idées et découvertes