Environnements de prévisualisation
Déployez chaque pull request d'une application Git à sa propre adresse temporaire, construite depuis la branche de la pull request et supprimée quand celle-ci est fermée ou fusionnée.
Fonctionnement des prévisualisations
Quand votre fournisseur Git signale qu'une pull request a été ouverte, rouverte ou a reçu de nouveaux commits, sh0 clone la branche de la pull request, la construit comme l'application, démarre un conteneur distinct et lui attribue une adresse dédiée. La production n'est pas touchée. Quand la pull request est fermée ou fusionnée, sh0 arrête le conteneur, retire la route et supprime l'enregistrement.
sh0 n'écrit rien sur la pull request : ni commentaire, ni statut de vérification. L'adresse de la prévisualisation est visible dans l'onglet Prévisualisations de l'application et avec sh0 preview my-api list.
Prérequis
- Une application déployée depuis un dépôt Git hébergé sur GitHub, GitLab ou Bitbucket. L'activation est refusée sur une application déployée depuis une archive ou une image : aucune pull request ne peut l'atteindre.
- Le webhook de l'application configuré chez le fournisseur (voir Déploiement Git), avec les événements de pull request ajoutés : « Pull requests » sur GitHub, « Merge request events » sur GitLab, les événements de pull request sur Bitbucket.
- Les prévisualisations activées sur l'application. sh0 accepte aussi de les activer sur une application qui n'est pas une application Git, mais rien n'y créera jamais de prévisualisation.
Activer les prévisualisations
Dans le tableau de bord, ouvrez l'onglet Prévisualisations de l'application, cliquez sur Activer les environnements de preview et réglez le TTL (heures) (168 heures, soit sept jours, par défaut). En ligne de commande :
$ sh0 preview my-api enable --ttl 48
Preview environments enabled for app my-api.
TTL: 48 hours (2 days)
$ sh0 preview my-api list
No preview environments found.
$ sh0 preview my-api disable
Preview environments disabled for app my-api.La désactivation empêche la création de nouvelles prévisualisations. Celles qui existent déjà restent jusqu'à leur expiration ou leur suppression, à ceci près que la fermeture ou la fusion de leur pull request les détruit toujours.
Adresses des prévisualisations
L'adresse est un seul label DNS formé du numéro de la pull request et du nom de l'application, reliés par des tirets : pr-<numéro>-<app>, suivi du domaine de base du serveur. La pull request 12 de l'application my-api, sur un serveur dont le domaine de base est example.com, obtient pr-12-my-api.example.com.
Sur un serveur qui utilise le service d'adresses sh0.app, l'identifiant du serveur est ajouté avec un tiret de plus, toujours dans le même label, pour que l'adresse reste couverte par le certificat générique. Si le nom est déjà pris, sh0 ajoute un suffixe de quatre caractères ; les noms longs sont raccourcis pour tenir dans la limite de 63 caractères d'un label DNS. Une prévisualisation garde son adresse d'un commit à l'autre.
Ce qu'une prévisualisation partage avec la production
Depuis 1.10.3 : Une prévisualisation exécute le code d'une pull request que personne n'a encore relue : elle ne reçoit donc pas vos variables de production. Elle reçoit seulement les variables que vous déclarez pour les prévisualisations, nommées PREVIEW_<NOM> sur l'application ou le projet ; le conteneur les voit sans le préfixe. PREVIEW_DATABASE_URL devient DATABASE_URL dans la prévisualisation, et la DATABASE_URL de production ne l'atteint jamais.
PREVIEW_ reste remise au code de n'importe quelle pull request. Faites-la pointer vers une base de test et des clés de test, jamais vers la production, et n'activez les prévisualisations que sur des dépôts où toute personne pouvant ouvrir une pull request est de confiance. Depuis la 1.10.3, une prévisualisation tourne aussi sur son propre réseau : elle n'atteint ni vos applications de production ni vos serveurs de bases, ni par adresse ni par nom.internal. Donnez-lui une base qu'elle joint par une adresse publique.Les hooks de déploiement ne s'exécutent pas pour les prévisualisations.
Durée de vie et nettoyage
- Pull request fermée ou fusionnée : la prévisualisation est détruite aussitôt.
- TTL atteint : toutes les 5 minutes, sh0 détruit les prévisualisations en service dont la durée de vie est écoulée. Elle se compte depuis la création de la prévisualisation et n'est pas prolongée par de nouveaux commits ; modifier le TTL ne vaut que pour les prévisualisations créées ensuite.
- Prévisualisation en échec : elle n'est pas nettoyée par le TTL ; supprimez-la depuis l'onglet Prévisualisations ou avec
sh0 preview my-api delete <id>. - Une application peut avoir au plus 50 prévisualisations ; au-delà, une nouvelle pull request n'en obtient pas tant qu'une autre n'a pas été supprimée.