Déployer une api node.js sur Heroku avec Gitlab CI/DI

nodejs heroku gitlab

Enfin, enfin, c’est rĂ©ussi !

Sur notre projet de metaverse 2D que nous dĂ©veloppons chez DevToBeCurious (vous en saurez plus d’ici quelques mois), nous avons mis en place le dĂ©ploiement automatique depuis gitlab de notre front et de notre back.

Spécifications techniques

Nous avons un front qui contient :
– du react
– du phaserjs
– du socket.io

Pour notre back, nous avons un POC suivant :
– du node.js
– du express (qui va devenir du nest.js)
– du socket.io

Intégration et déploiement continus sur gitlab

Etant des grands fans de l’automatisation du build et de la livraison continue chez DevToBeCurious, j’ai cherchĂ© Ă  voir comment dĂ©ployer sur internet sans avoir Ă  crĂ©er de serveur.

Ca tombe bien, il existe des serveurs dispos sur Internet pour le front, pour le back !

Pour le front, nous avons choisi :
Firebase

Pour le back, nous avons pris :
Heroku

Déployer sur Firebase

Le déploiement sur firebase se fait vraiment facilement depuis notre gitlab.
(En fin d’article, je vous mettrai Ă  dispo notre yaml pour plus de dĂ©tails).

Déployer sur Heroku

LĂ  oĂč ça se corse, c’est pour dĂ©ployer notre back sur Heroku !

Le problÚme se présente car nous avons notre back dans un sous dossier.
Or, pour déployer, nous utilisons dpl.
Et dpl va déployer en partant du principe que notre repository complet est le projet à déployer !

Nous obtenons une erreur de ce type :

ERROR: Application not supported by ‘heroku/nodejs’ buildpack
remote: !
remote: ! The ‘heroku/nodejs’ buildpack is set on this application, but was
remote: ! unable to detect a Node.js codebase.
remote: !
remote: ! A Node.js app on Heroku requires a ‘package.json’ at the root of
remote: ! the directory structure.
remote: !
remote: ! If you are trying to deploy a Node.js application, ensure that this
remote: ! file is present at the top level directory.

Nous, nous voulons pouvoir déployer uniquement le sous-dossier du back.

Déployer un sous-dossier

Déjà, nous avons testé avec la CLI de heroku en local, et le déploiement fonctionne bien en passant par .. git !

Nous y sommes arrives en lançant, en local, la commande :

git subtree push –prefix back-end/api heroku main
(en ayant fait avant : un add remote pour heroku)

Et c’est lĂ , la clef !
Nous allons utiliser git directement sur gitlab !

Pour y arriver, nous allons utiliser la notion de subtree de git.

Ainsi, nous allons :
1. Créer un subtree pour notre dossier back
git subtree split –prefix back-end/api -b api

2. Push notre code sur le repository heroku
git push -f heroku api:main

Bingo !
Tout fonctionne bien !! <3

Notre adresse

1 rue du guesclin
44000 Nantes

Notre téléphone

+33 2 79 65 52 87

Société

DevToBeCurious SARL
84860163900018 - Nantes B 848 601 639