{"id":83320,"date":"2026-05-14T09:30:55","date_gmt":"2026-05-14T08:30:55","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=83320&#038;preview=true&#038;preview_id=83320"},"modified":"2026-05-15T15:47:57","modified_gmt":"2026-05-15T14:47:57","slug":"automatiser-environments-staging-api-kinsta","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/","title":{"rendered":"Comment automatiser le provisionnement de l&rsquo;environnement de sprint avec Jira et l&rsquo;API Kinsta ?"},"content":{"rendered":"<p>Chaque sprint commence avec un tableau rempli de tickets et une \u00e9quipe qui a besoin d&rsquo;un endroit propre pour travailler. Pour les agences qui g\u00e8rent des projets WordPress sur des cycles de deux semaines, cela signifie qu&rsquo;il faut cr\u00e9er un <a href=\"https:\/\/kinsta.com\/fr\/docs\/hebergement-wordpress\/environnement-staging\/\">environnement de staging<\/a> dans MyKinsta avant que le premier ticket ne soit pris en compte.<\/p>\n<p>Cela ne prend que quelques minutes, mais c&rsquo;est le genre de t\u00e2che qui passe entre les mailles du filet parce qu&rsquo;elle semble triviale.<\/p>\n<p>L&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/docs\/api-kinsta\/\">API Kinsta<\/a> peut supprimer cette \u00e9tape. Lorsqu&rsquo;un sprint d\u00e9marre dans <a href=\"https:\/\/www.atlassian.com\/software\/jira\" target=\"_blank\" rel=\"noopener noreferrer\">Jira<\/a>, vous pouvez configurer un crochet web qui d\u00e9clenche un \u00e9v\u00e8nement dans l&rsquo;intergiciel, qui lit alors la charge utile, l&rsquo;associe \u00e0 un site Kinsta et appelle l&rsquo;API pour cr\u00e9er un nouvel environnement de staging.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pourquoi les agences devraient automatiser le provisionnement de l&rsquo;environnement<\/h2>\n<p>Cr\u00e9er un environnement apr\u00e8s avoir planifi\u00e9 un sprint signifie ouvrir MyKinsta, trouver le bon site client parmi une liste de dizaines, cr\u00e9er et nommer un environnement, puis revenir \u00e0 <a href=\"https:\/\/www.atlassian.com\/software\/jira\" target=\"_blank\" rel=\"noopener noreferrer\">Jira<\/a>. Bien que cela ne soit pas compliqu\u00e9, cela doit se faire au bon moment, \u00e0 chaque fois, et pour chaque projet client en cours.<\/p>\n<p>Ne pas le faire signifie qu&rsquo;une \u00e9quipe commence \u00e0 travailler dans l&rsquo;environnement du dernier sprint. \u00c0 partir de l\u00e0, les changements s&rsquo;accumulent les uns sur les autres, et lorsqu&rsquo;il y a un bogue, l&rsquo;isoler s&rsquo;apparente plus \u00e0 de l&rsquo;arch\u00e9ologie qu&rsquo;\u00e0 du d\u00e9bogage.<\/p>\n<h2>Ce dont vous avez besoin avant de commencer<\/h2>\n<p>Pour connecter l&rsquo;API Kinsta et Jira, vous avez besoin d&rsquo;un compte Kinsta avec au moins un site WordPress dans un environnement existant, un compte Jira Cloud avec un acc\u00e8s administrateur pour configurer les crochets web, et <a href=\"https:\/\/kinsta.com\/knowledgebase\/what-is-node-js\/\">Node.js<\/a> install\u00e9 localement.<\/p>\n<p>Pour vous authentifier avec l&rsquo;API Kinsta, naviguez vers <strong>[Votre entreprise]<\/strong> &gt; <strong>R\u00e9glages de l&rsquo;entreprise<\/strong> &gt; <strong>Cl\u00e9s API<\/strong> dans <a href=\"https:\/\/my.kinsta.com\/?lang=fr\">MyKinsta<\/a> et cliquez sur <strong>Cr\u00e9er une cl\u00e9 API<\/strong>.<\/p>\n<figure id=\"attachment_208873\" aria-describedby=\"caption-attachment-208873\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208873 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/api-keys-1.png\" alt=\"Le tableau de bord MyKinsta montrant les cl\u00e9s API.\" width=\"1200\" height=\"441\"><figcaption id=\"caption-attachment-208873\" class=\"wp-caption-text\">Le tableau de bord MyKinsta montrant les cl\u00e9s API.<\/figcaption><\/figure>\n<p>Ensuite, donnez un nom \u00e0 la cl\u00e9, d\u00e9finissez une dur\u00e9e d&rsquo;expiration et cliquez sur <strong>G\u00e9n\u00e9rer<\/strong>. La cl\u00e9 n&rsquo;est affich\u00e9e qu&rsquo;une seule fois, alors notez-la avant de continuer.<\/p>\n<p>Vous la placez dans un fichier <code>.env<\/code> \u00e0 la racine du projet avec l&rsquo;identifiant de votre entreprise Kinsta, que vous pouvez trouver sous <strong>R\u00e9glages de l&rsquo;entreprise<\/strong> &gt; <strong>D\u00e9tails de facturation <\/strong>:<\/p>\n<pre><code class=\"language-bash\">KINSTA_API_KEY=your_api_key_here\nKINSTA_COMPANY_ID=your_company_id_here<\/code><\/pre>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Le niveau d&rsquo;acc\u00e8s d&rsquo;une cl\u00e9 API Kinsta correspond au r\u00f4le qui l&rsquo;a cr\u00e9\u00e9e. Ainsi, les cl\u00e9s de niveau d\u00e9veloppeur ont des autorisations plus restreintes que celles g\u00e9n\u00e9r\u00e9es par les propri\u00e9taires ou les administrateurs de l&rsquo;entreprise. C&rsquo;est la premi\u00e8re chose que vous devez v\u00e9rifier si une requ\u00eate renvoie une erreur de permission.<\/p>\n<\/aside>\n\n<h3>Obtenir vos identifiants de site Jira et Kinsta<\/h3>\n<p>Vous avez besoin de l&rsquo;ID du site Kinsta pour chaque projet client dans l&rsquo;automatisation. Il s&rsquo;agit d&rsquo;un UUID que Kinsta attribue lors de la cr\u00e9ation du site. Il apparait dans l&rsquo;URL MyKinsta lorsque vous ouvrez un site ou par l&rsquo;appel <code>GET \/sites<\/code> une fois que votre cl\u00e9 API est en place :<\/p>\n<pre><code class=\"language-bash\">https:\/\/my.kinsta.com\/sites\/details\/fbab4927-e354-4044-b226-29ac0fbd20ca\/\u2026<\/code><\/pre>\n<p>Du c\u00f4t\u00e9 de Jira, vous avez besoin de l&rsquo;identifiant num\u00e9rique de chaque projet que vous souhaitez connecter. Il apparait dans l&rsquo;URL (ici comme <code>2<\/code>) :<\/p>\n<pre><code class=\"language-bash\">https:\/\/your-domain.atlassian.net\/jira\/software\/projects\/SCRUM\/boards\/2<\/code><\/pre>\n<p>C&rsquo;est la m\u00eame valeur que Jira inclut dans le payload du webhook <code>sprint_started<\/code> comme <code>originBoardId<\/code>. La correspondance entre les ID de conseil et les ID de site se trouve dans votre fichier <code>.env<\/code> :<\/p>\n<pre><code class=\"language-bash\">BOARD_ID_CLIENT_A=2\nSITE_ID_CLIENT_A=fbab4927-e354-4044-b226-29ac0fbd20ca\nBOARD_ID_CLIENT_B=5\nSITE_ID_CLIENT_B=44b5a6d1-c83f-4b0e-9a1c-2e7dbc903fa1<\/code><\/pre>\n<p>De plus, pour le d\u00e9veloppement local, Jira ne peut pas atteindre directement l&rsquo;<code>h\u00f4te local<\/code>. <a href=\"https:\/\/ngrok.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Ngrok<\/a> peut \u00eatre utilis\u00e9 pour exposer un port local \u00e0 l&rsquo;internet avec une URL publique temporaire, que vous pouvez utiliser comme point de terminaison de votre crochet web pendant le d\u00e9veloppement. Une fois que vous avez d\u00e9ploy\u00e9 une adresse middleware, vous pouvez la remplacer.<\/p>\n<h2>Comment automatiser le provisionnement de l&rsquo;environnement de sprint avec Jira et l&rsquo;API Kinsta<\/h2>\n<p>Cette int\u00e9gration s&rsquo;effectue sur deux syst\u00e8mes. Dans Jira, un webhook se d\u00e9clenche lorsqu&rsquo;un sprint d\u00e9marre et transmet la charge utile de l&rsquo;\u00e9v\u00e8nement \u00e0 votre middleware. Pour Kinsta, l&rsquo;intergiciel lit l&rsquo;ID du conseil \u00e0 partir de la charge utile, le r\u00e9sout en ID de site \u00e0 l&rsquo;aide de la carte de configuration et appelle l&rsquo;API Kinsta pour cr\u00e9er un environnement de staging simple nomm\u00e9 d&rsquo;apr\u00e8s le sprint.<\/p>\n<h3>1. Enregistrer un webhook Jira pour les \u00e9v\u00e8nements de sprint<\/h3>\n<p>Jira Cloud vous propose deux fa\u00e7ons d&rsquo;enregistrer un webhook. L&rsquo;option la plus simple pour la plupart des \u00e9quipes est l&rsquo;interface utilisateur Jira. L&rsquo;option <strong>R\u00e9glages<\/strong> &gt; <strong>Syst\u00e8me<\/strong> se trouve dans le menu sup\u00e9rieur droit :<\/p>\n<figure id=\"attachment_208877\" aria-describedby=\"caption-attachment-208877\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208877 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/system-settings.png\" alt=\"L'option Jira Cloud System dans les r\u00e9glages g\u00e9n\u00e9raux.\" width=\"1200\" height=\"575\"><figcaption id=\"caption-attachment-208877\" class=\"wp-caption-text\">L&rsquo;option Jira Cloud System dans les r\u00e9glages g\u00e9n\u00e9raux.<\/figcaption><\/figure>\n<p>De l\u00e0, choisissez <strong>Avanc\u00e9<\/strong> &gt; <strong>WebHooks<\/strong>, puis cliquez sur <strong>Cr\u00e9er un WebHook <\/strong>:<\/p>\n<figure id=\"attachment_208874\" aria-describedby=\"caption-attachment-208874\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208874 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/create-webhook-button.png\" alt=\"Section WebHooks avec un bouton Cr\u00e9er un WebHook en haut \u00e0 droite.\" width=\"1200\" height=\"315\"><figcaption id=\"caption-attachment-208874\" class=\"wp-caption-text\">Section WebHooks avec un bouton Cr\u00e9er un WebHook en haut \u00e0 droite.<\/figcaption><\/figure>\n<p>Ici, saisissez un nom, collez une URL d&rsquo;intergiciel avec <code>\/sprint<\/code> en annexe (une option factice est suffisante pour l&rsquo;instant), et sous <strong>\u00c9v\u00e8nements<\/strong>, s\u00e9lectionnez <strong>Sprint<\/strong> &gt; <strong>d\u00e9marr\u00e9<\/strong>. Cela cr\u00e9e un webhook administrateur, qui se d\u00e9clenche pour chaque \u00e9v\u00e8nement <code>sprint_started<\/code> dans l&rsquo;ensemble de votre instance Jira.<\/p>\n<figure id=\"attachment_208875\" aria-describedby=\"caption-attachment-208875\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208875 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/create-webhook-jira.png\" alt=\"Le formulaire de cr\u00e9ation d'un webhook Jira.\" width=\"1200\" height=\"646\"><figcaption id=\"caption-attachment-208875\" class=\"wp-caption-text\">Le formulaire de cr\u00e9ation d&rsquo;un webhook Jira.<\/figcaption><\/figure>\n<p>La deuxi\u00e8me option est l&rsquo;API REST, en utilisant <code>POST \/rest\/webhooks\/1.0\/webhook<\/code>. Cela fonctionne bien lorsque l&rsquo;enregistrement du crochet web fait partie d&rsquo;un script de d\u00e9ploiement :<\/p>\n<pre><code class=\"language-bash\">curl -X POST \\\n\u00a0\u00a0https:\/\/your-domain.atlassian.net\/rest\/webhooks\/1.0\/webhook \\\n\u00a0\u00a0-u your-email@example.com:your-api-token \\\n\u00a0\u00a0-H 'Content-Type: application\/json' \\\n\u00a0\u00a0-d '{\n\u00a0\u00a0\u00a0\u00a0\"name\": \"Sprint provisioning webhook\",\n\u00a0\u00a0\u00a0\u00a0\"url\": \"https:\/\/your-middleware-url.com\/sprint\",\n\u00a0\u00a0\u00a0\u00a0\"events\": [\"sprint_started\"],\n\u00a0\u00a0\u00a0\u00a0\"filters\": {},\n\u00a0\u00a0\u00a0\u00a0\"excludeBody\": false\n\u00a0\u00a0}'<\/code><\/pre>\n<p>L&rsquo;appel \u00e0 <code>PUT \/rest\/webhooks\/1.0\/webhook\/refresh<\/code> ajoute une extension au d\u00e9lai d&rsquo;expiration de 30 jours pour le webhook. Lorsque Jira d\u00e9clenche <code>sprint_started<\/code>, la charge utile arrive \u00e0 votre point de terminaison sous la forme d&rsquo;un POST JSON avec la structure suivante :<\/p>\n<pre><code class=\"language-json\">{\n\u00a0\u00a0\"timestamp\": 1705431600000,\n\u00a0\u00a0\"webhookEvent\": \"sprint_started\",\n\u00a0\u00a0\"sprint\": {\n\u00a0\u00a0\u00a0\u00a0\"id\": 15,\n\u00a0\u00a0\u00a0\u00a0\"self\": \"https:\/\/your-domain.atlassian.net\/rest\/agile\/1.0\/sprint\/15\",\n\u00a0\u00a0\u00a0\u00a0\"state\": \"active\",\n\u00a0\u00a0\u00a0\u00a0\"name\": \"Sprint 12\",\n\u00a0\u00a0\u00a0\u00a0\"startDate\": \"2026-02-02T00:00:00.000Z\",\n\u00a0\u00a0\u00a0\u00a0\"endDate\": \"2026-02-27T00:00:00.000Z\",\n\u00a0\u00a0\u00a0\u00a0\"originBoardId\": 2,\n\u00a0\u00a0\u00a0\u00a0\"goal\": \"Complete payment processing improvements\"\n\u00a0\u00a0}\n}<\/code><\/pre>\n<p>L&rsquo;intergiciel utilise <code>sprint.originBoardId<\/code> pour rechercher l&rsquo;ID du site Kinsta et <code>sprint.name<\/code> pour nommer le nouvel environnement : chaque \u00e9v\u00e8nement <code>sprint_started<\/code> dans votre instance Jira atteint le point de terminaison. La recherche de l&rsquo;ID du tableau dans la carte de configuration est ce qui permet d&rsquo;\u00e9tendre l&rsquo;automatisation au bon projet client et d&rsquo;ignorer tout le reste.<\/p>\n<h3>2. Construire le point de terminaison de l&rsquo;intergiciel<\/h3>\n<p>Avec le webhook en place, vous devez initialiser un nouveau projet Node.js et installer <a href=\"https:\/\/kinsta.com\/knowledgebase\/what-is-express-js\/\">Express.js<\/a> avec <code>dotenv<\/code> :<\/p>\n<pre><code class=\"language-bash\">npm init -y\nnpm install express dotenv<\/code><\/pre>\n<p><code>express<\/code> s&rsquo;occupe du routage et de l&rsquo;analyse des requ\u00eates, tandis que <code>dotenv<\/code> charge votre fichier <code>.env<\/code>.\u00a0 Vous devez cr\u00e9er <code>app.js<\/code> pour configurer le serveur. Voici le fichier complet :<\/p>\n<pre><code class=\"language-javascript\">\/\/ app.js\nconst express = require('express');\nconst crypto = require('crypto');\nrequire('dotenv').config();\nconst app = express();\n\n\/\/ Raw body parser on the \/sprint route enables HMAC signature verification\napp.use('\/sprint', express.raw({ type: 'application\/json' }));\napp.use(express.json());\n\nconst KinstaAPIUrl = 'https:\/\/api.kinsta.com\/v2';\nconst headers = {\n\u00a0\u00a0'Content-Type': 'application\/json',\n\u00a0\u00a0Authorization: `Bearer ${process.env.KINSTA_API_KEY}`\n};\n\n\/\/ Board ID to Kinsta site ID config map\nconst siteConfig = {\n\u00a0\u00a0[process.env.BOARD_ID_CLIENT_A]: process.env.SITE_ID_CLIENT_A,\n\u00a0\u00a0[process.env.BOARD_ID_CLIENT_B]: process.env.SITE_ID_CLIENT_B,\n};\n\nfunction verifyJiraSignature(req) {\n\u00a0\u00a0const signature = req.headers['x-hub-signature'];\n\u00a0\u00a0const secret = process.env.JIRA_WEBHOOK_SECRET;\n\u00a0\u00a0if (!signature || !secret) return false;\n\u00a0\u00a0const expected = 'sha256=' + crypto\n\u00a0\u00a0\u00a0\u00a0.createHmac('sha256', secret)\n\u00a0\u00a0\u00a0\u00a0.update(req.body)\n\u00a0\u00a0\u00a0\u00a0.digest('hex');\n\u00a0\u00a0return crypto.timingSafeEqual(\n\u00a0\u00a0\u00a0\u00a0Buffer.from(signature),\n\u00a0\u00a0\u00a0\u00a0Buffer.from(expected)\n\u00a0\u00a0);\n}\n\napp.post('\/sprint', async (req, res) =&gt; {\n\u00a0\u00a0if (!verifyJiraSignature(req)) {\n\u00a0\u00a0\u00a0\u00a0return res.status(401).json({ message: 'Invalid signature' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const body = JSON.parse(req.body);\n\u00a0\u00a0const { webhookEvent, sprint } = body;\n\n\u00a0\u00a0if (webhookEvent !== 'sprint_started') {\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Event ignored' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const boardId = String(sprint.originBoardId);\n\u00a0\u00a0const siteId = siteConfig[boardId];\n\n\u00a0\u00a0if (!siteId) {\n\u00a0\u00a0\u00a0\u00a0console.log(`No site configured for board ${boardId}`);\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Board not mapped' });\n\u00a0\u00a0}\n\n\u00a0\u00a0\/\/ Kinsta API calls added in the steps below\n\u00a0\u00a0res.status(200).json({ message: 'Received' });\n});\n\napp.listen(3000, () =&gt; console.log('Middleware running on port 3000'));<\/code><\/pre>\n<p>Pour prot\u00e9ger le point de terminaison, vous g\u00e9n\u00e9rez une cl\u00e9 secr\u00e8te lors de la configuration du webhook. Jira rend cela facultatif pendant la configuration, mais c&rsquo;est pratiquement essentiel pour une instance s\u00e9curis\u00e9e.<\/p>\n<h4>S\u00e9curit\u00e9 du point de terminaison<\/h4>\n<p>Jira signe chaque charge utile et inclut le r\u00e9sultat dans l&rsquo;en-t\u00eate <code>X-Hub-Signature<\/code> sous la forme <code>sha256=&lt;hash&gt;<\/code>. Vous ajoutez le secret \u00e0 votre fichier <code>.env<\/code> avec les autres informations d&rsquo;identification :<\/p>\n<pre><code class=\"language-bash\">JIRA_WEBHOOK_SECRET=your_webhook_secret_here<\/code><\/pre>\n<p>La fonction de v\u00e9rification se trouve dans <strong>app.js<\/strong> et utilise le module <code>cryptographique<\/code> int\u00e9gr\u00e9 de Node. Elle lit la signature dans l&rsquo;en-t\u00eate de la requ\u00eate, calcule le HMAC attendu par rapport au corps de la requ\u00eate brute, et utilise <code>timingSafeEqual<\/code> pour les comparer de mani\u00e8re \u00e0 emp\u00eacher les attaques temporelles. Voici la partie concern\u00e9e du fichier app.js :<\/p>\n<pre><code class=\"language-javascript\">const crypto = require('crypto');\n\nfunction verifyJiraSignature(req) {\n\u00a0\u00a0const signature = req.headers['x-hub-signature'];\n\u00a0\u00a0const secret = process.env.JIRA_WEBHOOK_SECRET;\n\u00a0\u00a0if (!signature || !secret) return false;\n\u00a0\u00a0const expected = 'sha256=' + crypto\n\u00a0\u00a0\u00a0\u00a0.createHmac('sha256', secret)\n\u00a0\u00a0\u00a0\u00a0.update(req.body)\n\u00a0\u00a0\u00a0\u00a0.digest('hex');\n\u00a0\u00a0return crypto.timingSafeEqual(\n\u00a0\u00a0\u00a0\u00a0Buffer.from(signature),\n\u00a0\u00a0\u00a0\u00a0Buffer.from(expected)\n\u00a0\u00a0);\n}<\/code><\/pre>\n<p>Cette fonction est la premi\u00e8re chose appel\u00e9e dans le gestionnaire de route <code>POST \/sprint<\/code>. Si la v\u00e9rification \u00e9choue, l&rsquo;intergiciel renvoie <code>401<\/code> imm\u00e9diatement, et rien d&rsquo;autre ne s&rsquo;ex\u00e9cute :<\/p>\n<pre><code class=\"language-javascript\">app.post('\/sprint', async (req, res) =&gt; {\n\u00a0\u00a0if (!verifyJiraSignature(req)) {\n\u00a0\u00a0\u00a0\u00a0return res.status(401).json({ message: 'Invalid signature' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const body = JSON.parse(req.body);\n\u00a0\u00a0\/\/ \u2026rest of the handler\n});<\/code><\/pre>\n<p>La route utilise <code>express.raw()<\/code> sur le chemin <code>\/sprint<\/code> car <code>verifyJiraSignature<\/code> en a besoin pour calculer le HMAC. Une fois la v\u00e9rification r\u00e9ussie, <code>JSON.parse(req.body)<\/code> donne le m\u00eame r\u00e9sultat que <code>express.json()<\/code>.<\/p>\n<h3>3. S&rsquo;authentifier avec l&rsquo;API Kinsta et r\u00e9cup\u00e9rer les environnements du site<\/h3>\n<p>Toutes les requ\u00eates \u00e0 l&rsquo;API Kinsta utilisent l&rsquo;authentification par jeton Bearer : la constante <code>headers<\/code> dans <code>app.js<\/code> g\u00e8re cela pour chaque requ\u00eate dans l&rsquo;application. La ligne <code>require('dotenv').config()<\/code> au sommet assure que la cl\u00e9 se charge \u00e0 partir de <code>.env<\/code> avant que quoi que ce soit d&rsquo;autre ne s&rsquo;ex\u00e9cute, donc elle n&rsquo;appara\u00eet jamais dans le code source lui-m\u00eame.<\/p>\n<p>Kinsta utilise les ID d&rsquo;environnement plut\u00f4t que les ID de site pour le point final de provisionnement, vous devez donc ajouter une fonction <code>getEnvironmentId<\/code> sous la constante <code>headers<\/code> :<\/p>\n<pre><code class=\"language-javascript\">const getEnvironmentId = async (siteId) =&gt; {\n\u00a0\u00a0const resp = await fetch(\n\u00a0\u00a0\u00a0\u00a0`${KinstaAPIUrl}\/sites\/${siteId}\/environments`,\n\u00a0\u00a0\u00a0\u00a0{ method: 'GET', headers }\n\u00a0\u00a0);\n\u00a0\u00a0const data = await resp.json();\n\u00a0\u00a0return data.site.environments[0].id;\n};<\/code><\/pre>\n<p>Cette m\u00e9thode appelle <code>GET \/sites\/{siteId}\/environments<\/code> et renvoie l&rsquo;identifiant du premier environnement (c&rsquo;est-\u00e0-dire en ligne) dans la r\u00e9ponse. Si un site utilise plusieurs environnements et que vous devez en cibler un sp\u00e9cifique, comparez avec le nom de l&rsquo;environnement plut\u00f4t que de prendre le premier r\u00e9sultat.<\/p>\n<h3>4. Cr\u00e9er un environnement de staging simple \u00e0 l&rsquo;aide de l&rsquo;API Kinsta<\/h3>\n<p>Une fois les identifiants du site et de l&rsquo;environnement r\u00e9solus, l&rsquo;intergiciel appelle <code>POST \/sites\/{siteId}\/environments\/plain<\/code> pour cr\u00e9er l&rsquo;environnement de sprint. Pour cela, vous utilisez la fonction <code>createSprintEnvironment<\/code> situ\u00e9e sous <code>getEnvironmentId<\/code>\u00a0 :<\/p>\n<pre><code class=\"language-javascript\">const createSprintEnvironment = async (siteId, sprintName) =&gt; {\n\u00a0\u00a0const resp = await fetch(\n\u00a0\u00a0\u00a0\u00a0`${KinstaAPIUrl}\/sites\/${siteId}\/environments\/plain`,\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0method: 'POST',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0headers,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0body: JSON.stringify({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0display_name: sprintName,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0is_premium: false\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0})\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0);\n\u00a0\u00a0const data = await resp.json();\n\u00a0\u00a0return data;\n};<\/code><\/pre>\n<p><code>display_name<\/code> appara\u00eet dans MyKinsta, alors que l&rsquo;utilisation de <code>sprint.name<\/code> \u00e0 partir du payload Jira directement signifie que chaque environnement dans le tableau de bord correspond au sprint auquel il appartient. Le drapeau <code>is_premium<\/code> d\u00e9termine si Kinsta le provisionne comme un <a href=\"https:\/\/kinsta.com\/fr\/blog\/environnements-staging-kinsta\/\">environnement de staging standard ou premium<\/a>. En le d\u00e9finissant \u00e0 <code>false<\/code>, vous cr\u00e9ez un environnement standard.<\/p>\n<p>Lorsque la requ\u00eate atteint Kinsta, elle renvoie <code>202 Accepted<\/code> avec un <code>operation_id<\/code> plut\u00f4t qu&rsquo;un environnement compl\u00e9t\u00e9 :<\/p>\n<pre><code class=\"language-json\">{\n\u00a0\u00a0\"operation_id\": \"environments:add-plain-54fb80af-576c-4fdc-ba4f-b596c83f15a1\",\n\u00a0\u00a0\"message\": \"Adding plain environment in progress\",\n\u00a0\u00a0\"status\": 202\n}<\/code><\/pre>\n<p>Le traitement <code>async<\/code>\u00a0de Kinsta \u00e9vite de bloquer le fil de la requ\u00eate pendant que le provisionnement se termine. L&rsquo;<code>identifiant de l'op\u00e9ration<\/code> est ce que vous transmettez au point de terminaison pour suivre la progression. Ensuite, mettez \u00e0 jour la route <code>POST \/sprint<\/code> pour appeler les deux fonctions en s\u00e9quence :<\/p>\n<pre><code class=\"language-javascript\">app.post('\/sprint', async (req, res) =&gt; {\n\u00a0\u00a0if (!verifyJiraSignature(req)) {\n\u00a0\u00a0\u00a0\u00a0return res.status(401).json({ message: 'Invalid signature' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const body = JSON.parse(req.body);\n\u00a0\u00a0const { webhookEvent, sprint } = body;\n\n\u00a0\u00a0if (webhookEvent !== 'sprint_started') {\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Event ignored' });\n\u00a0\u00a0}\n\n\u00a0\u00a0const boardId = String(sprint.originBoardId);\n\u00a0\u00a0const siteId = siteConfig[boardId];\n\n\u00a0\u00a0if (!siteId) {\n\u00a0\u00a0\u00a0\u00a0console.log(`No site configured for board ${boardId}`);\n\u00a0\u00a0\u00a0\u00a0return res.status(200).json({ message: 'Board not mapped' });\n\u00a0\u00a0}\ntry {\n\u00a0\u00a0\u00a0\u00a0const envId = await getEnvironmentId(siteId);\n\u00a0\u00a0\u00a0\u00a0const result = await createSprintEnvironment(siteId, sprint.name);\n\u00a0\u00a0\u00a0\u00a0res.status(200).json(result);\n\u00a0\u00a0} catch (err) {\n\u00a0\u00a0\u00a0\u00a0console.error(err);\n\u00a0\u00a0\u00a0\u00a0res.status(500).json({ message: 'Environment creation failed' });\n\u00a0\u00a0}\n});<\/code><\/pre>\n<p>L&rsquo;utilisation du bloc <code>try<\/code> est plus propre que l&rsquo;utilisation de plusieurs instructions <code>if<\/code>. Cependant, gardez la v\u00e9rification de la signature Jira en t\u00eate du fichier car elle doit \u00eatre ex\u00e9cut\u00e9e avant tout autre code.<\/p>\n<h3>5. Interroger l&rsquo;\u00e9tat de l&rsquo;op\u00e9ration et confirmer le provisionnement<\/h3>\n<p>Pour suivre l&rsquo;ach\u00e8vement, interrogez <code>GET \/operations\/{operation_id}<\/code> jusqu&rsquo;\u00e0 ce que l&rsquo;\u00e9tat revienne \u00e0 <code>200<\/code> \u00e0 l&rsquo;aide d&rsquo;une fonction <code>pollOperation<\/code> sous <code>createSprintEnvironment<\/code> :<\/p>\n<pre><code class=\"language-javascript\">const pollOperation = async (operationId, intervalMs = 5000, maxAttempts = 12) =&gt; {\n\u00a0\u00a0for (let attempt = 0; attempt &lt; maxAttempts; attempt++) {\n\u00a0\u00a0\u00a0\u00a0await new Promise(resolve =&gt; setTimeout(resolve, intervalMs));\n\u00a0\u00a0\u00a0\u00a0const resp = await fetch(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0`${KinstaAPIUrl}\/operations\/${operationId}`,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ method: 'GET', headers }\n\u00a0\u00a0\u00a0\u00a0);\n\u00a0\u00a0\u00a0\u00a0const data = await resp.json();\n\u00a0\u00a0\u00a0\u00a0if (data.status === 200) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0console.log(`Environment ready: ${operationId}`);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return data;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0if (data.status &gt;= 400) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw new Error(`Operation failed: ${data.message}`);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0}\n\u00a0\u00a0throw new Error('Operation timed out after maximum attempts');\n};<\/code><\/pre>\n<p>La boucle attend cinq secondes entre chaque tentative et couvre jusqu&rsquo;\u00e0 une minute de temps de provisionnement. Si <code>200<\/code> signale l&rsquo;ach\u00e8vement de l&rsquo;op\u00e9ration, tout \u00e9tat <code>4xx<\/code> indique que l&rsquo;enqu\u00eate n&rsquo;a pas abouti.<\/p>\n<figure id=\"attachment_208876\" aria-describedby=\"caption-attachment-208876\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-208876 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2026\/04\/mykinsta-environments.png\" alt=\"Le tableau de bord MyKinsta montrant la liste des environnements pour un site WordPress.\" width=\"1200\" height=\"442\"><figcaption id=\"caption-attachment-208876\" class=\"wp-caption-text\">Le tableau de bord MyKinsta montrant la liste des environnements pour un site WordPress.<\/figcaption><\/figure>\n<p>Si vous ex\u00e9cutez tout cela avec <code>node app.js<\/code> et d\u00e9marrez un sprint dans Jira, l&rsquo;environnement devrait apparaitre dans MyKinsta en l&rsquo;espace d&rsquo;une minute ou deux.<\/p>\n<h2>Gardez votre agence en avance sur le sprint<\/h2>\n<p>Cette int\u00e9gration fournit un environnement de staging propre et nomm\u00e9 dans MyKinsta, bas\u00e9 sur le d\u00e9marrage d&rsquo;un sprint dans Jira. Le webhook se d\u00e9clenche, le middleware r\u00e9sout l&rsquo;ID du forum en un site, l&rsquo;API Kinsta s&rsquo;occupe du reste, et l&rsquo;\u00e9quipe r\u00e9cup\u00e8re ses tickets avec un environnement qui l&rsquo;attend d\u00e9j\u00e0.<\/p>\n<p>Lorsque l&rsquo;intergiciel est pr\u00eat \u00e0 \u00eatre mis en service, <a href=\"https:\/\/sevalla.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sevalla<\/a> est une cible de d\u00e9ploiement simple. Vous poussez le projet vers un fournisseur Git, connectez le repo, ajoutez les variables d&rsquo;environnement et mettez \u00e0 jour l&rsquo;URL du webhook Jira avec l&rsquo;adresse live.<\/p>\n<p>De plus, le <a href=\"https:\/\/kinsta.com\/fr\/programme-agence-partenaire\/\">programme Agency Partner<\/a> de Kinsta est id\u00e9al pour les agences qui g\u00e8rent plusieurs projets clients. Il vous offre une assistance d\u00e9di\u00e9e, des opportunit\u00e9s de co-marketing et le type de partenariat d&rsquo;infrastructure qui prend en charge la couche d&rsquo;automatisation que vous construisez au-dessus de l&rsquo;API Kinsta.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chaque sprint commence avec un tableau rempli de tickets et une \u00e9quipe qui a besoin d&rsquo;un endroit propre pour travailler. Pour les agences qui g\u00e8rent des &#8230;<\/p>\n","protected":false},"author":287,"featured_media":83321,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[953],"class_list":["post-83320","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Automatisez les environnements de staging \u00e0 l&#039;aide des API Jira et Kinsta<\/title>\n<meta name=\"description\" content=\"Utilisez l&#039;API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comment automatiser le provisionnement de l&#039;environnement de sprint avec Jira et l&#039;API Kinsta ?\" \/>\n<meta property=\"og:description\" content=\"Utilisez l&#039;API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstafrance\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-14T08:30:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-05-15T14:47:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1470\" \/>\n\t<meta property=\"og:image:height\" content=\"735\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joel Olawanle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Utilisez l&#039;API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\" \/>\n<meta name=\"twitter:creator\" content=\"@olawanle_joel\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_fr\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Comment automatiser le provisionnement de l&rsquo;environnement de sprint avec Jira et l&rsquo;API Kinsta ?\",\"datePublished\":\"2026-05-14T08:30:55+00:00\",\"dateModified\":\"2026-05-15T14:47:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/\"},\"wordCount\":1967,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"inLanguage\":\"fr-FR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/\",\"name\":\"Automatisez les environnements de staging \u00e0 l'aide des API Jira et Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"datePublished\":\"2026-05-14T08:30:55+00:00\",\"dateModified\":\"2026-05-15T14:47:57+00:00\",\"description\":\"Utilisez l'API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png\",\"width\":1470,\"height\":735},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/fr\/sujets\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Comment automatiser le provisionnement de l&#8217;environnement de sprint avec Jira et l&#8217;API Kinsta ?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/fr\/#website\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/fr\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstafrance\/\",\"https:\/\/x.com\/kinsta_fr\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g\",\"caption\":\"Joel Olawanle\"},\"description\":\"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.\",\"sameAs\":[\"https:\/\/joelolawanle.com\/\",\"https:\/\/www.linkedin.com\/in\/olawanlejoel\/\",\"https:\/\/x.com\/olawanle_joel\",\"https:\/\/www.youtube.com\/@joelolawanle\"],\"gender\":\"male\",\"knowsAbout\":[\"JavaScript\",\"React\",\"Next.js\"],\"knowsLanguage\":[\"English\"],\"jobTitle\":\"Technical Editor\",\"worksFor\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Automatisez les environnements de staging \u00e0 l'aide des API Jira et Kinsta","description":"Utilisez l'API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/","og_locale":"fr_FR","og_type":"article","og_title":"Comment automatiser le provisionnement de l'environnement de sprint avec Jira et l'API Kinsta ?","og_description":"Utilisez l'API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.","og_url":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2026-05-14T08:30:55+00:00","article_modified_time":"2026-05-15T14:47:57+00:00","og_image":[{"width":1470,"height":735,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Utilisez l'API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Joel Olawanle","Dur\u00e9e de lecture estim\u00e9e":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Comment automatiser le provisionnement de l&rsquo;environnement de sprint avec Jira et l&rsquo;API Kinsta ?","datePublished":"2026-05-14T08:30:55+00:00","dateModified":"2026-05-15T14:47:57+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/"},"wordCount":1967,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","inLanguage":"fr-FR"},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/","url":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/","name":"Automatisez les environnements de staging \u00e0 l'aide des API Jira et Kinsta","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","datePublished":"2026-05-14T08:30:55+00:00","dateModified":"2026-05-15T14:47:57+00:00","description":"Utilisez l'API Kinsta et les webhooks Jira pour cr\u00e9er automatiquement des environnements de test au d\u00e9but du sprint et maintenir la propret\u00e9 des flux de travail WordPress.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2026\/05\/how-to-automate-sprint-environment-provisioning-with-jira-and-the-kinsta-api.png","width":1470,"height":735},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/automatiser-environments-staging-api-kinsta\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/fr\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/fr\/sujets\/api\/"},{"@type":"ListItem","position":3,"name":"Comment automatiser le provisionnement de l&#8217;environnement de sprint avec Jira et l&#8217;API Kinsta ?"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/fr\/#website","url":"https:\/\/kinsta.com\/fr\/","name":"Kinsta\u00ae","description":"Solutions d&#039;h\u00e9bergement premium, rapides et s\u00e9curis\u00e9es","publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/fr\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstafrance\/","https:\/\/x.com\/kinsta_fr","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/051bf577ce2c837846a1db9eef184758?s=96&d=mm&r=g","caption":"Joel Olawanle"},"description":"Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 300 technical articles majorly around JavaScript and it's frameworks.","sameAs":["https:\/\/joelolawanle.com\/","https:\/\/www.linkedin.com\/in\/olawanlejoel\/","https:\/\/x.com\/olawanle_joel","https:\/\/www.youtube.com\/@joelolawanle"],"gender":"male","knowsAbout":["JavaScript","React","Next.js"],"knowsLanguage":["English"],"jobTitle":"Technical Editor","worksFor":"Kinsta","url":"https:\/\/kinsta.com\/fr\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/83320","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/comments?post=83320"}],"version-history":[{"count":7,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/83320\/revisions"}],"predecessor-version":[{"id":83346,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/83320\/revisions\/83346"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/83320\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/83320\/translations\/it"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/83320\/translations\/fr"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/83320\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/83321"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=83320"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=83320"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=83320"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}