Aller au contenu

Déploiements

La vérification part avec le déploiement, pas au prochain cycle

Une sonde qui passe toutes les 5 minutes vous apprend une régression 5 minutes trop tard. PostShip se déclenche sur votre mise en ligne, puis revient 2 fois.

Déploiements

La vérification part avec le déploiement, pas au prochain cycle

Une sonde qui passe toutes les 5 minutes vous apprend une régression 5 minutes trop tard. PostShip se déclenche sur votre mise en ligne, puis revient 2 fois.

styles/header.css- .header { margin: 0 24px; }+ .header { margin: 0 auto; }js/pay-loader.js → js/pay.jsrenommé
$ git commit -am "fix: marges du header"[main 9f3c2e1] fix: marges du header 2 files changed, 1 insertion(+), 1 deletion(-)$ git push origin mainTo github.com:vous/votre-site.git 4b1d7a0..9f3c2e1 main -> main
Vercel · votre-siteBuilding

9f3c2e1 · fix: marges du header

  • Cloning github.com/vous/votre-site (main)
  • Installing dependencies
  • Building
  • Compiled successfully
  • Deploying outputs
  • Webhook deployment.ready → PostShip
PostShip · votre-sitedeployment.ready

9f3c2e1 reçu à 16:02:40

  • /en file
  • /tarifsen file
  • /checkouten file
  • /blogen file
  • /contacten file

Acte 1 · Le push

16:02. Un correctif de style.

3 lignes de CSS, et un fichier renommé au passage. Rien qui ressemble à un risque.

git push.

Le correctif part sur main, comme des dizaines d'autres avant lui.

Le build passe au vert.

L'hébergeur compile, déploie et répond « Ready ». Rien dans ce journal ne lit la page que vos clients vont ouvrir.

Et prévient PostShip.

Vercel, Netlify ou Cloudflare Pages, branché une fois depuis l'app : l'événement de déploiement arrive dans la seconde, et les pages surveillées partent en file.

Acte 1 · Le push

  1. 16:02. Un correctif de style.

    3 lignes de CSS, et un fichier renommé au passage. Rien qui ressemble à un risque.

  2. git push.

    Le correctif part sur main, comme des dizaines d'autres avant lui.

  3. Le build passe au vert.

    L'hébergeur compile, déploie et répond « Ready ». Rien dans ce journal ne lit la page que vos clients vont ouvrir.

  4. Et prévient PostShip.

    Vercel, Netlify ou Cloudflare Pages, branché une fois depuis l'app : l'événement de déploiement arrive dans la seconde, et les pages surveillées partent en file.

styles/header.css
- .header { margin: 0 24px; }
+ .header { margin: 0 auto; }
js/pay-loader.js → js/pay.js

$ git commit -am "fix: marges du header"
[main 9f3c2e1] fix: marges du header
 2 files changed, 1 insertion(+), 1 deletion(-)
$ git push origin main
To github.com:vous/votre-site.git
   4b1d7a0..9f3c2e1  main -> main

Brancher une fois, ne plus y penser

3 réglages, puis plus rien à faire : chaque mise en ligne déclenche la vérification, sans une ligne dans votre CI.

  • Votre hébergeur

    Vercel, Netlify ou Cloudflare Pages, depuis les réglages du projet. Sur Vercel, l'intégration permet aussi le retour arrière.

  • Vos pages

    Celles qui comptent : l'accueil, les tarifs, le paiement. 5 URLs sur Découverte, 25 URLs sur Pro, 100 URLs sur Pro Plus.

  • Vos canaux

    L'email, Slack et Discord pour tous les plans ; un webhook signé à partir de Pro.

Réglages · Intégrations

  • VercelBranché · retour arrière possible
  • NetlifyBrancher
  • Cloudflare PagesBrancher

Acte 2 · Les passages

16:02:41. T+0.

La vérification part dans la seconde qui suit la mise en ligne : les 5 URLs surveillées, demandées tout de suite.

5 pages, 6 contrôles chacune.

La page et ses ressources, l'indexabilité, la carte sociale, le sitemap, le certificat et la lisibilité par les moteurs de réponse.

/checkout ne passe pas.

La page répond 200 en 184 ms. Une sonde de disponibilité s'arrêterait là, au vert.

On entre dans la page.

Le récapitulatif, le prix, le bouton. Et l'emplacement du paiement, qui reste vide.

Dans son HTML.

Tel que le serveur l'envoie. Une ligne charge le script de paiement.

/js/pay-loader.js

PostShip demande aussi chaque ressource que la page appelle.

404.

Le correctif a renommé le fichier ; la page, elle, l'appelle encore par son ancien nom. Elle s'affiche, le paiement ne se charge plus.

Vu à T+0, 1 seconde après la mise en ligne.

Une sonde voit 5 pages en 200. PostShip voit une ressource en 404 sur la page qui encaisse.

Acte 2 · Les passages

  1. 16:02:41. T+0.

    La vérification part dans la seconde qui suit la mise en ligne : les 5 URLs surveillées, demandées tout de suite.

  2. 5 pages, 6 contrôles chacune.

    La page et ses ressources, l'indexabilité, la carte sociale, le sitemap, le certificat et la lisibilité par les moteurs de réponse.

  3. /checkout ne passe pas.

    La page répond 200 en 184 ms. Une sonde de disponibilité s'arrêterait là, au vert.

  4. On entre dans la page.

    Le récapitulatif, le prix, le bouton. Et l'emplacement du paiement, qui reste vide.

  5. Dans son HTML.

    Tel que le serveur l'envoie. Une ligne charge le script de paiement.

  6. /js/pay-loader.js

    PostShip demande aussi chaque ressource que la page appelle.

  7. 404.

    Le correctif a renommé le fichier ; la page, elle, l'appelle encore par son ancien nom. Elle s'affiche, le paiement ne se charge plus.

  8. Vu à T+0, 1 seconde après la mise en ligne.

    Une sonde voit 5 pages en 200. PostShip voit une ressource en 404 sur la page qui encaisse.

<!doctype html>
<html lang="fr">
<head>
  <title>Paiement · votre-site.com</title>
  <link rel="stylesheet" href="/css/site.css">
  <script src="/js/pay-loader.js" defer></script>
</head>
<body>
  <main class="checkout">
    <h1>Paiement</h1>
    <div id="payment"></div>
    <button>Payer 34 €</button>

GET /js/pay-loader.js HTTP/2
host: votre-site.com
accept: */*

HTTP/2 404
content-type: text/html; charset=utf-8
date: 23 sept. 2026 16:02:41

Ce que chaque passage lit, sur chaque URL

Pas une capture d'écran : la page telle que le serveur l'envoie. 6 contrôles, à la mise en ligne, à T+2 et T+8, puis à chaque passage de votre cadence.

  • La page et ses ressources

    Le statut, le temps de réponse, et chaque script, feuille de style ou image qu'elle appelle.

  • L'indexabilité

    Ce qui la sortirait des moteurs de recherche : un noindex, un canonical qui pointe ailleurs.

  • La carte sociale

    Le titre, la description et l'image qu'affichent les réseaux quand on partage le lien.

  • Le sitemap

    Présent, et lisible par les moteurs.

  • Le certificat

    Valide, et le nombre de jours qu'il lui reste.

  • Les moteurs de réponse

    Ce que ChatGPT, Perplexity et les autres peuvent lire de la page.

Slack#alertes

votre-site.com — /checkout : /js/pay-loader.js répond 404 depuis le déploiement 9f3c2e1.

Cause probable : le déploiement 9f3c2e1 (16:02:40), « fix: marges du header ».

Discord#alertes

votre-site.com — /checkout : /js/pay-loader.js répond 404 depuis le déploiement 9f3c2e1.

Cause probable : le déploiement 9f3c2e1 (16:02:40), « fix: marges du header ».

EmailÉchec sur /checkout

votre-site.com — /checkout : /js/pay-loader.js répond 404 depuis le déploiement 9f3c2e1.

Cause probable : le déploiement 9f3c2e1 (16:02:40), « fix: marges du header ».

WebhookPOST
{
  "event": "fail",
  "projectName": "votre-site",
  "items": [{
    "url": "https://votre-site.com/checkout",
    "httpStatus": 200,
    "missing": ["asset:404:/js/pay-loader.js"]
  }]
}

Déploiements · votre-site

  • 9f3c2e1fix: marges du header16:02:40En échecRevenir en arrière
  • 4b1d7a0feat: page contact15:41:08Vérifié bon

Remettre en ligne 4b1d7a0, le dernier déploiement vérifié bon ?

AnnulerRevenir en arrière
/
Accueil/
/tarifs
Tarifs/tarifs
/checkout
Paiement/checkout
/blog
Journal/blog
/contact
Contact/contact

T+2 · 16:04:41 · 5 sur 5

T+8 · 16:10:41 · 5 sur 5

  1. 16:02:41échec sur /checkout
  2. 16:02:42alerte
  3. 16:03:14retour arrière
  4. 16:04:41rétabli

Acte 3 · Le retour

16:02:42. L'alerte part.

Sur chaque canal branché, en même temps, une seule fois : pas un message par passage.

Avec sa cause probable.

Un déploiement dans la minute qui précède un échec est le premier suspect : l'alerte le nomme, commit compris.

Le retour arrière, à un lien.

Sur la page Déploiements de l'app : le dernier déploiement que PostShip a vu passer, et un bouton pour le remettre en ligne. Sur Vercel, où l'intégration a la main.

Tout repart en arrière.

Vercel repointe vos domaines vers 4b1d7a0, vérifié bon à 15:41. Rien n'est reconstruit : quelques secondes.

16:04:41. T+2.

Le passage prévu 2 minutes après la mise en ligne trouve les 5 pages au vert. /checkout charge de nouveau son script.

16:10:41. T+8. C'est tenu.

Dernier passage prévu, dernier vert. L'incident se referme et garde sa chronologie, de l'échec au retour.

Acte 3 · Le retour

  1. 16:02:42. L'alerte part.

    Sur chaque canal branché, en même temps, une seule fois : pas un message par passage.

  2. Avec sa cause probable.

    Un déploiement dans la minute qui précède un échec est le premier suspect : l'alerte le nomme, commit compris.

  3. Le retour arrière, à un lien.

    Sur la page Déploiements de l'app : le dernier déploiement que PostShip a vu passer, et un bouton pour le remettre en ligne. Sur Vercel, où l'intégration a la main.

  4. Tout repart en arrière.

    Vercel repointe vos domaines vers 4b1d7a0, vérifié bon à 15:41. Rien n'est reconstruit : quelques secondes.

  5. 16:04:41. T+2.

    Le passage prévu 2 minutes après la mise en ligne trouve les 5 pages au vert. /checkout charge de nouveau son script.

  6. 16:10:41. T+8. C'est tenu.

    Dernier passage prévu, dernier vert. L'incident se referme et garde sa chronologie, de l'échec au retour.

  1. 16:02:41échec sur /checkout
  2. 16:02:42alerte
  3. 16:03:14retour arrière
  4. 16:04:41rétabli

Selon le plan

Tous les plans vérifient à la mise en ligne. Ce qui change : la cadence entre deux passages, le nombre d'URLs, les canaux et la mémoire.

Découverte

Entre deux passages
5 min
URLs surveillées
5
Canaux d'alerte
Email, Slack, Discord
Historique
7 jours

Pro

Entre deux passages
2 min
URLs surveillées
25
Canaux d'alerte
Email, Slack, Discord, webhook sortant
Historique
30 jours

Pro Plus

Entre deux passages
1 min
URLs surveillées
100
Canaux d'alerte
Email, Slack, Discord, webhook sortant
Historique
90 jours

Le même incident, vu par une sonde

Une sonde de disponibilité demande une adresse et regarde son statut. C'est utile, et c'est tout ce qu'elle voit.

Une sonde de disponibilitéPostShip
Quand elle passeÀ son rythme, toutes les quelques minutesÀ la mise en ligne, puis à T+2, T+8 et à votre cadence
Ce qu'elle demandeL'adresse, et son statutLa page, ses ressources, ses balises, son certificat
Ce qu'elle a vu à 16:02200 sur les 5 pages/js/pay-loader.js en 404 sur /checkout
Ce qu'elle en ditRienL'alerte, sa cause probable, et le retour arrière

Avant, après, et ce qui a changé

À chaque mise en production, PostShip ouvre vos 3 premières pages dans le Chrome mobile de PageSpeed : une capture, le score Lighthouse, le LCP, le CLS et le temps de blocage. Puis il compare au déploiement précédent, pixel à pixel. Un statut 200 ne dit pas qu'un bouton est devenu gris.

Vous fixez la limite, PostShip prévient

Sans réglage, la comparaison reste visible sur l'écran du déploiement et ne réveille personne. Les mesures tournent sur tous les plans ; la comparaison pixel à pixel, le seuil et le budget sont en Pro et Pro Plus.

Un seuil de rendu

5 % de pixels changés, par exemple : au-delà, l'alerte part sur vos canaux et le Ship Score perd une ligne.

Un budget de performance

Un score Lighthouse plancher, un LCP maximal. Franchi, c'est une ligne au barème, quel que soit le nombre de pages lentes.

Des zones masquées

Un carrousel, une date, un compteur de stock : masquez la zone sur la fiche de l'URL, elle ne compte plus dans la comparaison.

Les previews aussi

Une préversion est comparée à la dernière capture de production : vous voyez ce que la pull request change avant de la fusionner, sans alerte ni note.

Ce qu'on vous demande souvent

EnsuiteCe qu'on regarde vraiment, au-delà du statut 200