{"id":72118,"date":"2023-08-21T14:10:02","date_gmt":"2023-08-21T13:10:02","guid":{"rendered":"https:\/\/kinsta.com\/fr\/?p=72118&#038;preview=true&#038;preview_id=72118"},"modified":"2023-08-22T06:12:02","modified_gmt":"2023-08-22T05:12:02","slug":"configurer-pipeline-ci-cd","status":"publish","type":"post","link":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/","title":{"rendered":"Comment cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l&rsquo;API Kinsta"},"content":{"rendered":"<p>Dans le monde rapide du <a href=\"https:\/\/kinsta.com\/web-development\/\">d\u00e9veloppement web<\/a>, l&rsquo;int\u00e9gration et le d\u00e9ploiement continus (<a href=\"https:\/\/kinsta.com\/fr\/blog\/outils-devops\/#devops-pipeline-cicd-tools\">CI\/CD<\/a>) sont devenus des pratiques indispensables pour fournir efficacement des logiciels de haute qualit\u00e9. L&rsquo;int\u00e9gration et le d\u00e9ploiement continus permettent aux d\u00e9veloppeurs d&rsquo;automatiser le processus de construction, de test et de d\u00e9ploiement des modifications du code, r\u00e9duisant ainsi le risque d&rsquo;erreur humaine et permettant des it\u00e9rations plus rapides.<\/p>\n<p>Cet article explique l&rsquo;importance de la CI\/CD, comment cr\u00e9er un pipeline de CI et comment mettre en place un d\u00e9ploiement continu dans votre pipeline de CI avec l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/docs\/api-kinsta\/\">API Kinsta<\/a> de mani\u00e8re programmatique &#8211; le tout avec les Actions GitHub dans votre d\u00e9p\u00f4t <a href=\"https:\/\/kinsta.com\/fr\/blog\/comment-pousser-code-github\/\">GitHub<\/a>.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Pourquoi utiliser CI\/CD ?<\/h2>\n<p>La plateforme d&rsquo;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">h\u00e9bergement d&rsquo;applications<\/a> de Kinsta a toujours offert une option de d\u00e9ploiement automatique, d\u00e9clench\u00e9e chaque fois qu&rsquo;une modification est apport\u00e9e \u00e0 une branche sp\u00e9cifique de votre d\u00e9p\u00f4t Git h\u00e9berg\u00e9. Cependant, cela peut ne pas \u00eatre id\u00e9al pour les grands projets avec plusieurs membres de l&rsquo;\u00e9quipe. De nombreux <a href=\"https:\/\/kinsta.com\/fr\/blog\/types-de-developpeurs\/\">d\u00e9veloppeurs<\/a> ont tendance \u00e0 \u00e9viter d&rsquo;activer le d\u00e9ploiement automatique pour diverses raisons.<\/p>\n<p>L&rsquo;une d&rsquo;entre elles est que, dans un environnement collaboratif o\u00f9 plusieurs d\u00e9veloppeurs travaillent sur le m\u00eame projet, les d\u00e9ploiements automatiques d\u00e9clench\u00e9s par la modification d&rsquo;un d\u00e9veloppeur dans le d\u00e9p\u00f4t peuvent entra\u00eener une instabilit\u00e9 et des probl\u00e8mes impr\u00e9vus. En l&rsquo;absence de tests et de validation appropri\u00e9s, m\u00eame une petite modification du code peut perturber le site en production, entra\u00eenant potentiellement des temps d&rsquo;arr\u00eat et des exp\u00e9riences n\u00e9gatives pour les utilisateurs.<\/p>\n<p>C&rsquo;est l\u00e0 qu&rsquo;un pipeline CI\/CD entre en jeu. En cr\u00e9ant un flux de travail CI\/CD soigneusement orchestr\u00e9, les d\u00e9veloppeurs peuvent s&rsquo;assurer que les modifications du code sont test\u00e9es et valid\u00e9es avant d&rsquo;\u00eatre d\u00e9ploy\u00e9es sur le site r\u00e9el. Il existe de nombreux outils disponibles pour mettre en \u0153uvre le CI\/CD dans le d\u00e9veloppement de logiciels, nous utiliserons <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Actions<\/a> pour ce tutoriel.<\/p>\n<h2>Qu&rsquo;est-ce que GitHub Actions ?<\/h2>\n<p>GitHub Actions est un puissant outil d&rsquo;automatisation fourni par GitHub. Il offre aux d\u00e9veloppeurs la possibilit\u00e9 d&rsquo;automatiser diverses t\u00e2ches, processus et flux de travail au sein de leurs projets de d\u00e9veloppement logiciel. Il s&rsquo;int\u00e8gre aux d\u00e9p\u00f4ts GitHub, ce qui le rend facile \u00e0 utiliser.<\/p>\n<p>Gr\u00e2ce aux actions GitHub et \u00e0 l&rsquo;<a href=\"https:\/\/api-docs.kinsta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">API Kinsta<\/a>, vous pouvez d\u00e9finir des flux de travail personnalis\u00e9s qui r\u00e9pondent aux exigences de votre projet. Vous pouvez mettre en place un pipeline CI qui teste votre application et d\u00e9clenche le d\u00e9ploiement sur Kinsta.<\/p>\n<h2>D\u00e9marrer avec GitHub Actions<\/h2>\n<p>Les Actions GitHub fonctionnent sur le concept de flux de travail, qui sont des ensembles de t\u00e2ches automatis\u00e9es d\u00e9clench\u00e9es par des \u00e9v\u00e8nements sp\u00e9cifiques ou programm\u00e9es \u00e0 intervalles r\u00e9guliers. Ces \u00e9v\u00e8nements peuvent \u00eatre des pouss\u00e9es de code, des demandes d&rsquo;extraction, la cr\u00e9ation d&rsquo;une question, etc. Lorsque l&rsquo;un de ces \u00e9v\u00e9nements se produit, GitHub Actions lance automatiquement un flux de travail associ\u00e9, en ex\u00e9cutant une s\u00e9rie d&rsquo;\u00e9tapes pr\u00e9d\u00e9finies.<\/p>\n<p>Chaque \u00e9tape du flux de travail repr\u00e9sente une action particuli\u00e8re, telle que la construction du code, l&rsquo;ex\u00e9cution de tests, le d\u00e9ploiement ou l&rsquo;envoi de notifications. Cr\u00e9ons un flux de travail avec trois t\u00e2ches :<\/p>\n<ol start=\"1\">\n<li>V\u00e9rifier la syntaxe avec ESLint<\/li>\n<li>Ex\u00e9cuter les tests<\/li>\n<li>Red\u00e9ployer votre application<\/li>\n<\/ol>\n<h3>\u00c9tape 1 : Configurer votre d\u00e9p\u00f4t GitHub<\/h3>\n<p>Pour commencer \u00e0 utiliser les Actions GitHub, vous avez besoin d&rsquo;un d\u00e9p\u00f4t GitHub.<\/p>\n<p>Ici, nous utilisons <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\" target=\"_blank\" rel=\"noopener noreferrer\">ce d\u00e9p\u00f4t GitHub<\/a>, d\u00e9velopp\u00e9 pour le tutoriel <a href=\"https:\/\/kinsta.com\/fr\/blog\/clone-application-chatgpt\/\">Comment construire et d\u00e9ployer une application clone de ChatGPT avec React et OpenAI API<\/a>.<\/p>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 utiliser le d\u00e9p\u00f4t vous-m\u00eame en naviguant jusqu&rsquo;\u00e0 lui sur GitHub et en s\u00e9lectionnant : <strong>Utiliser ce mod\u00e8le<\/strong> &gt; <strong>Cr\u00e9er un nouveau d\u00e9p\u00f4t<\/strong>.<\/p>\n<p>Dans cette application React, des tests unitaires sont cr\u00e9\u00e9s pour tester chaque composant. ESLint est \u00e9galement utilis\u00e9 pour s&rsquo;assurer que la syntaxe et le formatage du code sont parfaits. Le pipeline CI bloquera un d\u00e9ploiement si une demande d&rsquo;extraction ou un code fusionn\u00e9 pouss\u00e9 vers le d\u00e9p\u00f4t \u00e9choue les tests du flux de travail.<\/p>\n<h3>\u00c9tape 2 : Cr\u00e9er un fichier de flux de travail<\/h3>\n<p>D\u00e9finissez votre flux de travail en cr\u00e9ant un fichier YAML dans le r\u00e9pertoire <strong>.github\/workflows<\/strong> de votre d\u00e9p\u00f4t. Ce r\u00e9pertoire doit se trouver \u00e0 la racine de votre r\u00e9f\u00e9rentiel. La convention de nommage pour les fichiers de flux de travail est <strong>nom-du-flux-de-travail.yml<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Dans votre d\u00e9p\u00f4t, cr\u00e9ez un r\u00e9pertoire <strong>.github<\/strong>.<\/li>\n<li>Dans le r\u00e9pertoire <strong>.github<\/strong>, cr\u00e9ez un nouveau r\u00e9pertoire appel\u00e9 <strong>workflows<\/strong>.<\/li>\n<li>Dans le r\u00e9pertoire workflows, cr\u00e9ez un nouveau fichier avec un nom comme <strong>build-test-deploy.yml<\/strong>.<\/li>\n<\/ol>\n<h3>\u00c9tape 3 : \u00c9crire le flux de travail CI\/CD<\/h3>\n<p>Maintenant que vous avez cr\u00e9\u00e9 votre fichier de flux de travail, d\u00e9finissez un flux de travail avec les \u00e9tapes n\u00e9cessaires pour v\u00e9rifier la syntaxe avec ESLint, ex\u00e9cuter les tests et d\u00e9ployer l&rsquo;application.<\/p>\n<h4>Cr\u00e9er un \u00e9v\u00e9nement CI<\/h4>\n<p>Lors de la cr\u00e9ation d&rsquo;un pipeline CI, la premi\u00e8re \u00e9tape consiste \u00e0 donner un nom au flux de travail, puis \u00e0 d\u00e9finir l&rsquo;\u00e9v\u00e9nement qui d\u00e9clenchera le flux de travail. Pour cet exemple, les deux \u00e9v\u00e9nements sont une pull request et un push vers la branche principale.<\/p>\n<pre><code class=\"language-yaml\">name: Build, Test, and Deploy\n\non:\n  push:\n    branches: \"main\"\n  pull_request:\n    branches: \"main\"<\/code><\/pre>\n<p>Si vous souhaitez programmer des t\u00e2ches p\u00e9riodiques (CRON jobs) pour des t\u00e2ches sp\u00e9cifiques, vous pouvez les ajouter au flux de travail. Par exemple, vous pourriez vouloir ex\u00e9cuter certaines t\u00e2ches telles que des sauvegardes de bases de donn\u00e9es, des nettoyages de donn\u00e9es ou d&rsquo;autres t\u00e2ches de maintenance p\u00e9riodiques.<\/p>\n<p>Voici un exemple de la mani\u00e8re dont vous pouvez ajouter un travail CRON au flux de travail :<\/p>\n<pre><code class=\"language-yaml\">on:\n  # Existing event triggers for push and pull_request\n\n  # Add a schedule for CRON jobs\n  schedule:\n    - cron: \"0 0 * * *\"<\/code><\/pre>\n<p>L&rsquo;exemple ci-dessus d\u00e9clenchera le flux de travail tous les jours \u00e0 minuit (heure UTC) puisque le programme cron est d\u00e9fini sur <code>0 0 * * *<\/code>. Vous pouvez personnaliser le programme cron pour r\u00e9pondre \u00e0 vos besoins sp\u00e9cifiques.<\/p>\n<p>Supposons que vous souhaitiez programmer le flux de travail CI\/CD pour qu&rsquo;il s&rsquo;ex\u00e9cute tous les lundis \u00e0 8 heures. Nous pouvons configurer une t\u00e2che CRON \u00e0 l&rsquo;aide de l&rsquo;\u00e9v\u00e8nement <code>schedule<\/code>:<\/p>\n<pre><code class=\"language-yaml\">name: Build, Test, and Deploy\n\non:\n  push:\n    branches: \"main\"\n  pull_request:\n    branches: \"main\"\n\n  # Schedule the workflow to run every Monday at 8 a.m. (UTC time)\n  schedule:\n    - cron: \"0 8 * * 1\"\n\njobs:\n # Add jobs<\/code><\/pre>\n<p>La syntaxe de planification utilis\u00e9e dans l&rsquo;\u00e9v\u00e8nement <code>schedule<\/code> pour les flux de travail GitHub Actions est bas\u00e9e sur la syntaxe UNIX cron. Elle vous permet de d\u00e9finir des heures ou des intervalles sp\u00e9cifiques pour l&rsquo;ex\u00e9cution automatique de votre flux de travail. La syntaxe se compose de cinq champs qui repr\u00e9sentent diff\u00e9rents aspects de la planification. Chaque champ est s\u00e9par\u00e9 par un espace. Le format g\u00e9n\u00e9ral de la syntaxe de planification est le suivant :<\/p>\n<pre><code class=\"language-yaml\">* * * * *\n\u252c \u252c \u252c \u252c \u252c\n\u2502 \u2502 \u2502 \u2502 \u2502\n\u2502 \u2502 \u2502 \u2502 \u2514\u2500 Day of the week (0 - 7) (Sunday to Saturday, where both 0 and 7 represent Sunday)\n\u2502 \u2502 \u2502 \u2514\u2500\u2500\u2500 Month (1 - 12)\n\u2502 \u2502 \u2514\u2500\u2500\u2500\u2500\u2500 Day of the month (1 - 31)\n\u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Hour (0 - 23)\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Minute (0 - 59)<\/code><\/pre>\n<p>D\u00e9composons maintenant chaque champ :<\/p>\n<ul>\n<li><strong>Minute (0 &#8211; 59) :<\/strong> La minute \u00e0 laquelle la t\u00e2che cron se d\u00e9clenchera. Par exemple, <code>15<\/code> signifie que le flux de travail se d\u00e9clenchera \u00e0 la 15\u00e8me minute de l&rsquo;heure.<\/li>\n<li><strong>Hour (0 &#8211; 23) :<\/strong> L&rsquo;heure \u00e0 laquelle la t\u00e2che cron se d\u00e9clenchera. Par exemple, <code>8<\/code> signifie que le flux de travail se d\u00e9clenchera \u00e0 8 heures du matin.<\/li>\n<li><strong>Day of the month (1 &#8211; 31) :<\/strong> Le jour du mois o\u00f9 la t\u00e2che cron se d\u00e9clenchera. Par exemple, <code>1<\/code> signifie que le flux de travail se d\u00e9clenchera le 1er jour du mois.<\/li>\n<li><strong>Month (1 &#8211; 12) :<\/strong> Le mois au cours duquel la t\u00e2che cron se d\u00e9clenchera. Par exemple, <code>6<\/code> signifie que le flux de travail se d\u00e9clenchera en juin.<\/li>\n<li><strong>Day of the week (0 &#8211; 7) :<\/strong> Le jour de la semaine o\u00f9 la t\u00e2che cron se d\u00e9clenchera. Ici, <code>0<\/code> et <code>7<\/code> repr\u00e9sentent tous deux le dimanche, tandis que <code>1<\/code> repr\u00e9sente le lundi, et ainsi de suite. Par exemple, <code>4<\/code> signifie que le flux de travail se d\u00e9clenchera le jeudi.<\/li>\n<\/ul>\n<p>Caract\u00e8res sp\u00e9ciaux :<\/p>\n<ul>\n<li><code><strong>*<\/strong><\/code> (ast\u00e9risque) : Correspond \u00e0 n&rsquo;importe quelle valeur de ce champ. Par exemple, <code>*<\/code> dans le champ minute signifie que le flux de travail se d\u00e9clenchera toutes les minutes.<\/li>\n<li><code><strong>*\/n<\/strong><\/code> (barre oblique) : Sp\u00e9cifie un intervalle. Par exemple, <code>*\/5<\/code> dans le champ des minutes signifie que le flux de travail se d\u00e9clenchera toutes les 5 minutes.<\/li>\n<li><code><strong>,<\/strong><\/code> (virgule) : Sp\u00e9cifie plusieurs valeurs sp\u00e9cifiques. Par exemple, <code>1,15,30<\/code> dans le champ des minutes signifie que le flux de travail se d\u00e9clenchera aux 1\u00e8re, 15\u00e8me et 30\u00e8me minutes de l&rsquo;heure.<\/li>\n<li><code><strong>-<\/strong><\/code> (trait d&rsquo;union) : Sp\u00e9cifie une plage de valeurs. Par exemple, <code>1-5<\/code> dans le champ du jour de la semaine signifie que le flux de travail se d\u00e9clenchera du lundi au vendredi (1 \u00e0 5).<\/li>\n<li><code><strong>?<\/strong><\/code> (point d&rsquo;interrogation) : Utilis\u00e9 pour ne pas sp\u00e9cifier de valeur particuli\u00e8re. Il est g\u00e9n\u00e9ralement utilis\u00e9 dans le champ du jour de la semaine lorsque le jour du mois est sp\u00e9cifi\u00e9. Par exemple, <code>?<\/code> dans le champ du jour de la semaine et <code>15<\/code> dans le champ du jour du mois signifie que le flux de travail se d\u00e9clenchera le 15e jour du mois, quel que soit le jour de la semaine.<\/li>\n<\/ul>\n<h4>Cr\u00e9er une t\u00e2che CI pour v\u00e9rifier la syntaxe avec ESLint<\/h4>\n<p>Pour mettre en place le processus de CI, nous allons cr\u00e9er les travaux ou t\u00e2ches n\u00e9cessaires. Chaque t\u00e2che doit avoir un nom clair et compr\u00e9hensible. Appelons le premier job <code>eslint<\/code> puisqu&rsquo;il s&rsquo;agit de v\u00e9rifier la syntaxe du code \u00e0 l&rsquo;aide d&rsquo;ESLint.<\/p>\n<p>En outre, nous pouvons fournir une description lisible par l&rsquo;homme, bien que cette partie soit facultative. Ensuite, nous sp\u00e9cifions que le job doit s&rsquo;ex\u00e9cuter sur un environnement Ubuntu et utiliser une strat\u00e9gie matricielle pour tester le code par rapport \u00e0 deux versions de <a href=\"https:\/\/kinsta.com\/fr\/sujets\/node-js\/\">Node.js<\/a>: <code>18.x<\/code> et <code>20.x<\/code>.<\/p>\n<pre><code class=\"language-yaml\">jobs:\n  eslint:\n    name: Check Syntax with ESLint\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x, 20.x]<\/code><\/pre>\n<p>Ensuite, d\u00e9finissez les \u00e9tapes que la t\u00e2che \u00ab ESLint \u00bb ex\u00e9cutera. Ces \u00e9tapes comprennent l&rsquo;extraction du code, la configuration de la version Node.js sp\u00e9cifi\u00e9e pour ex\u00e9cuter ESLint, la mise en cache des paquets npm, l&rsquo;installation des d\u00e9pendances du projet et, enfin, l&rsquo;ex\u00e9cution d&rsquo;ESLint pour v\u00e9rifier la syntaxe du code.<\/p>\n<pre><code class=\"language-yaml\">    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }} to Check Lint\n        uses: actions\/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: 'npm'\n\n      - name: Install Dependencies\n        run: npm ci\n\n      - name: Run ESLint\n        run: npm run lint<\/code><\/pre>\n<p>Dans le flux de travail ci-dessus, chaque \u00e9tape est d\u00e9crite par un nom afin de faciliter l&rsquo;identification de la source des erreurs ou des bogues lors de l&rsquo;inspection du flux de travail \u00e0 partir des actions GitHub. Notamment, dans la troisi\u00e8me \u00e9tape, nous utilisons la commande <code>npm ci<\/code> pour installer les d\u00e9pendances, ce qui est pr\u00e9f\u00e9rable \u00e0 <code>npm install<\/code> car elle effectue une installation propre. En outre, la derni\u00e8re \u00e9tape, qui consiste \u00e0 ex\u00e9cuter ESLint \u00e0 l&rsquo;aide de <code>npm run lint<\/code>, suppose que vous avez configur\u00e9 cette commande dans votre fichier <strong>package.json<\/strong>.<\/p>\n<p>Vous trouverez ci-dessous le travail complet de v\u00e9rification de la syntaxe du code avec ESLint :<\/p>\n<pre><code class=\"language-yaml\">jobs:\n  eslint:\n    name: Check Syntax with ESLint\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x, 20.x]\n\n    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }} to Check Lint\n        uses: actions\/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: 'npm'\n\n      - name: Install Dependencies\n        run: npm ci\n\n      - name: Run ESLint\n        run: npm run lint<\/code><\/pre>\n<h4>Cr\u00e9er une t\u00e2che CI pour ex\u00e9cuter les tests<\/h4>\n<p>Pour ajouter la t\u00e2che CI permettant d&rsquo;ex\u00e9cuter les tests, commencez par d\u00e9finir la t\u00e2che et donnez-lui un nom descriptif, par exemple <code>tests<\/code>. Nous pr\u00e9ciserons \u00e9galement que cette t\u00e2che d\u00e9pend de la t\u00e2che <code>eslint<\/code>, ce qui signifie que la t\u00e2che <code>eslint<\/code> s&rsquo;ex\u00e9cutera d&rsquo;abord avant la t\u00e2che <code>tests<\/code>. Cette d\u00e9pendance permet de s&rsquo;assurer que le code n&rsquo;est pas entach\u00e9 d&rsquo;erreurs de syntaxe avant l&rsquo;ex\u00e9cution des tests.<\/p>\n<pre><code class=\"language-yaml\">  tests:\n    name: Run Tests\n    needs: eslint\n    runs-on: ubuntu-latest<\/code><\/pre>\n<p>D\u00e9finissez ensuite les \u00e9tapes de la t\u00e2che <code>tests<\/code>. Comme pour la t\u00e2che pr\u00e9c\u00e9dente, nous allons v\u00e9rifier le code, configurer la version de Node.js <code>18.x<\/code> pour ex\u00e9cuter les tests, installer les d\u00e9pendances du projet \u00e0 l&rsquo;aide de <code>npm ci<\/code>, puis ex\u00e9cuter les tests \u00e0 l&rsquo;aide de la commande <code>npm run test<\/code>.<\/p>\n<pre><code class=\"language-yaml\">    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n\n      - name: Use Node.js 18.x to run Test\n        uses: actions\/setup-node@v3\n        with:\n          node-version: 18.x\n          cache: 'npm'\n\n      - name: Install Dependencies\n        run: npm ci\n\n      - name: Run Tests\n        run: npm run test<\/code><\/pre>\n<h4>Cr\u00e9er une t\u00e2che CI pour d\u00e9ployer avec l&rsquo;API Kinsta<\/h4>\n<p>Pour cr\u00e9er la t\u00e2che CI de d\u00e9ploiement vers Kinsta \u00e0 l&rsquo;aide de l&rsquo;API Kinsta, nous allons d\u00e9finir la t\u00e2che et la nommer <code>deploy<\/code>. Cette t\u00e2che aura des d\u00e9pendances sur les jobs <code>eslint<\/code> et <code>tests<\/code>, garantissant que le d\u00e9ploiement n&rsquo;est ex\u00e9cut\u00e9 qu&rsquo;apr\u00e8s que le code a \u00e9t\u00e9 v\u00e9rifi\u00e9 pour les erreurs de syntaxe et qu&rsquo;il a pass\u00e9 les tests. Nous allons configurer la t\u00e2che pour qu&rsquo;elle s&rsquo;ex\u00e9cute dans un <a href=\"https:\/\/kinsta.com\/fr\/blog\/verifier-votre-version-de-ubuntu\/\">environnement Ubuntu<\/a> en utilisant la derni\u00e8re version disponible.<\/p>\n<pre><code class=\"language-yaml\">  deploy:\n    name: Re-Deploy Application\n    needs: [eslint, tests]\n    runs-on: ubuntu-latest<\/code><\/pre>\n<p>Ensuite, d\u00e9finissez les \u00e9tapes. Dans ce cas, vous ex\u00e9cuterez une commande cURL pour interagir avec l&rsquo;API Kinsta de mani\u00e8re programmatique et d\u00e9clencher un red\u00e9ploiement. Commen\u00e7ons par comprendre l&rsquo;API Kinsta, les diff\u00e9rentes informations n\u00e9cessaires pour interagir avec l&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/blog\/api-endpoint\/\">API<\/a>, et comment obtenir\/stocker des informations importantes associ\u00e9es \u00e0 l&rsquo;API &#8211; comme la <a href=\"https:\/\/kinsta.com\/fr\/blog\/cle-api-kinsta\/\">cl\u00e9 API<\/a> &#8211; en toute s\u00e9curit\u00e9 sur GitHub.<\/p>\n<h2>Comprendre l&rsquo;API Kinsta<\/h2>\n<p>L&rsquo;<a href=\"https:\/\/kinsta.com\/fr\/changelog\/api-kinsta\/\">API de Kinsta<\/a> est un outil puissant qui vous permet d&rsquo;interagir avec les services de Kinsta de mani\u00e8re programmatique. Pour utiliser l&rsquo;API, vous devez avoir un compte avec au moins un site WordPress, une <a href=\"https:\/\/sevalla.com\/application-hosting\/\">application<\/a> ou une <a href=\"https:\/\/sevalla.com\/database-hosting\/\">base de donn\u00e9es<\/a> dans MyKinsta. Vous devez \u00e9galement g\u00e9n\u00e9rer une cl\u00e9 API pour vous authentifier et acc\u00e9der \u00e0 votre compte via l&rsquo;API.<\/p>\n<p>Pour g\u00e9n\u00e9rer une cl\u00e9 API :<\/p>\n<ol start=\"1\">\n<li>Allez sur votre tableau de bord MyKinsta.<\/li>\n<li>Naviguez jusqu&rsquo;\u00e0 la page des <strong>cl\u00e9s API <\/strong>(<strong>Votre nom<\/strong> &gt; <strong>R\u00e9glages de l&rsquo;entreprise<\/strong> &gt; <strong>Cl\u00e9s API<\/strong>).<\/li>\n<li>Cliquez sur <strong>Cr\u00e9er une cl\u00e9 API<\/strong>.<\/li>\n<li>Choisissez une date d&rsquo;expiration ou d\u00e9finissez une date de d\u00e9but personnalis\u00e9e et un nombre d&rsquo;heures pour l&rsquo;expiration de la cl\u00e9.<\/li>\n<li>Donnez un nom unique \u00e0 la cl\u00e9.<\/li>\n<li>Cliquez sur <strong>G\u00e9n\u00e9rer<\/strong>.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/create-api-key-on-mykinsta.jpg\" alt=\"Cr\u00e9ez une cl\u00e9 API sur MyKinsta.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Cr\u00e9ez une cl\u00e9 API sur MyKinsta.<\/figcaption><\/figure>\n<p>Apr\u00e8s avoir cr\u00e9\u00e9 une cl\u00e9 API, copiez-la et conservez-la dans un endroit s\u00fbr (nous vous recommandons d&rsquo;utiliser un <a href=\"https:\/\/kinsta.com\/fr\/blog\/gestionnaires-mots-passe\/\">gestionnaire de mot de passe<\/a>), car c&rsquo;est la <strong>seule fois o\u00f9<\/strong> elle sera r\u00e9v\u00e9l\u00e9e dans MyKinsta.<\/p>\n<h3>Comment d\u00e9clencher le d\u00e9ploiement avec l&rsquo;API Kinsta<\/h3>\n<p>Pour d\u00e9ployer une application sur Kinsta \u00e0 l&rsquo;aide de l&rsquo;API, vous avez besoin de deux param\u00e8tres : l&rsquo;identifiant de l&rsquo;application et la branche. Vous pouvez r\u00e9cup\u00e9rer par programme l&rsquo;identifiant de votre application en consultant d&rsquo;abord la liste de vos applications, qui fournira des d\u00e9tails sur chaque application, y compris son identifiant.<\/p>\n<p>Apr\u00e8s avoir obtenu les informations n\u00e9cessaires, vous pouvez effectuer une <a href=\"https:\/\/kinsta.com\/fr\/blog\/requetes-http-javascript\/\">requ\u00eate POST<\/a> au point de terminaison <a href=\"https:\/\/api-docs.kinsta.com\/tag\/Application-Deployments#operation\/manualDeployApplication\" target=\"_blank\" rel=\"noopener noreferrer\">\/applications\/deployments<\/a> de l&rsquo;API. Pour le pipeline CI, nous utiliserons cURL, un outil de ligne de commande permettant d&rsquo;interagir avec les URL.<\/p>\n<pre><code class=\"language-yaml\">curl -i -X POST \n  https:\/\/api.kinsta.com\/v2\/applications\/deployments \n  -H 'Authorization: Bearer &lt;YOUR_TOKEN_HERE&gt;' \n  -H 'Content-Type: application\/json' \n  -d '{\n    \"app_id\": \"&lt;YOUR_APP_ID&gt;\",\n    \"branch\": \"main\"\n  }'<\/code><\/pre>\n<h2>D\u00e9clencher le d\u00e9ploiement avec cURL dans le pipeline CI\/CD<\/h2>\n<p>Pour d\u00e9clencher le d\u00e9ploiement avec l&rsquo;API Kinsta, ajoutez la commande cURL \u00e0 la commande <code>run<\/code> de votre pipeline CI. Cependant, il est important de stocker votre cl\u00e9 API et votre ID d&rsquo;application en toute s\u00e9curit\u00e9.<\/p>\n<p>Pour <a href=\"https:\/\/kinsta.com\/fr\/blog\/github-actions-secrets\/\">stocker des secrets sur GitHub<\/a> et les utiliser dans les actions GitHub, suivez ces \u00e9tapes :<\/p>\n<ol start=\"1\">\n<li>Naviguez jusqu&rsquo;au d\u00e9p\u00f4t dans lequel vous souhaitez configurer le secret.<\/li>\n<li>Cliquez sur l&rsquo;onglet <strong>R\u00e9glages<\/strong> dans le menu du d\u00e9p\u00f4t.<\/li>\n<li>Dans la colonne lat\u00e9rale de gauche, s\u00e9lectionnez <strong>Secrets<\/strong> dans la cat\u00e9gorie <strong>Options<\/strong>.<\/li>\n<li>Cliquez sur <strong>Nouveau secret du d\u00e9p\u00f4t<\/strong>.<\/li>\n<li>Donnez un nom \u00e0 votre secret (comme <code>KINSTA_API_KEY<\/code>) et entrez votre cl\u00e9 API Kinsta dans le champ <strong>Valeur<\/strong>.<\/li>\n<li>Apr\u00e8s avoir saisi le nom et la valeur, cliquez sur le bouton <strong>Ajouter un secret<\/strong> pour le sauvegarder.<\/li>\n<li>R\u00e9p\u00e9tez le processus pour d&rsquo;autres secrets.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Stockez les secrets dans GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Stockez les secrets dans GitHub.<\/figcaption><\/figure>\n<p>Une fois les secrets ajout\u00e9s, vous pouvez les r\u00e9f\u00e9rencer dans votre flux de travail GitHub Actions \u00e0 l&rsquo;aide de la syntaxe <code>${{ secrets.SECRET_NAME }}<\/code>.<\/p>\n<p>Terminons maintenant la t\u00e2che <code>deploy<\/code> pour votre pipeline CI\/CD GitHub Actions. D\u00e9finissez les \u00e9tapes comme pr\u00e9c\u00e9demment, avec une seule \u00e9tape de d\u00e9ploiement vers Kinsta. Tout d&rsquo;abord, d\u00e9finissez les secrets dans la commande <code>env<\/code>, puis ajoutez la commande cURL pour ex\u00e9cuter le d\u00e9ploiement.<\/p>\n<pre><code class=\"language-yaml\">    steps:\n      - name: Deploy to Kinsta\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          APP_ID: ${{ secrets.APP_ID }}\n        run: |\n          curl -i -X POST \n            https:\/\/api.kinsta.com\/v2\/applications\/deployments \n            -H \"Authorization: Bearer $KINSTA_API_KEY\" \n            -H \"Content-Type: application\/json\" \n            -d '{\n              \"app_id\": \"'\"$APP_ID\"'\",\n              \"branch\": \"main\"\n            }'<\/code><\/pre>\n<p>Dans la commande cURL, vous remarquerez que les variables d&rsquo;environnement sont ajout\u00e9es dans la commande, ce qui permet aux secrets d&rsquo;\u00eatre accessibles en toute s\u00e9curit\u00e9 pendant le processus de d\u00e9ploiement.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Cette t\u00e2che CI <code>deploy<\/code> est con\u00e7ue pour ex\u00e9cuter le processus de d\u00e9ploiement \u00e0 l&rsquo;aide de l&rsquo;API Kinsta. Elle affichera un \u00e9tat de r\u00e9ussite m\u00eame si le processus de d\u00e9ploiement r\u00e9el rencontre des probl\u00e8mes ou des \u00e9checs. En effet, la r\u00e9ponse du flux de travail est bas\u00e9e sur le lancement r\u00e9ussi du d\u00e9ploiement, et non sur son ach\u00e8vement ou son \u00e9tat.<\/p>\n<\/aside>\n\n<p>Voici \u00e0 quoi ressemblera votre flux de travail CI\/CD final :<\/p>\n<pre><code class=\"language-yaml\">name: Build, Test, and Deploy\n\non:\n  push:\n    branches: \"main\"\n  pull_request:\n    branches: \"main\"\n\njobs:\n  eslint:\n    name: Check Syntax with ESLint\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18.x, 20.x]\n\n    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n        \n      - name: Use Node.js ${{ matrix.node-version }} to Check Lint\n        uses: actions\/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          cache: 'npm'\n          \n      - name: Install Dependencies\n        run: npm ci\n        \n      - name: Run ESLint\n        run: npm run lint\n\n  tests:\n    name: Run Tests\n    needs: eslint\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Checkout code\n        uses: actions\/checkout@v3\n        \n      - name: Use Node.js 18.x to run Test\n        uses: actions\/setup-node@v3\n        with:\n          node-version: 18.x\n          cache: 'npm'\n          \n      - name: Install Dependencies\n        run: npm ci\n        \n      - name: Run Tests\n        run: npm run test\n\n  deploy:\n    name: Re-Deploy Application\n    needs: [eslint, tests]\n    runs-on: ubuntu-latest\n\n    steps:\n      - name: Deploy to Kinsta\n        env:\n          KINSTA_API_KEY: ${{ secrets.KINSTA_API_KEY }}\n          APP_ID: ${{ secrets.APP_ID }}\n        run: |\n          curl -i -X POST \n            https:\/\/api.kinsta.com\/v2\/applications\/deployments \n            -H \"Authorization: Bearer $KINSTA_API_KEY\" \n            -H \"Content-Type: application\/json\" \n            -d '{\n              \"app_id\": \"'\"$APP_ID\"'\",\n              \"branch\": \"main\"\n            }'<\/code><\/pre>\n<p>Copiez le flux de travail donn\u00e9 et collez-le dans votre fichier <strong>build-test-deploy.yml<\/strong>. Ensuite, lancez une demande d&rsquo;extraction pour ajouter ce fichier \u00e0 la branche principale de votre d\u00e9p\u00f4t. N&rsquo;oubliez pas que cette demande d&rsquo;extraction d\u00e9clenchera automatiquement le flux de travail.<\/p>\n<p>Cela vous permet d&rsquo;examiner les modifications apport\u00e9es \u00e0 votre d\u00e9p\u00f4t et de vous assurer que toute nouvelle modification dans la demande d&rsquo;extraction r\u00e9pond aux v\u00e9rifications sp\u00e9cifi\u00e9es avant de d\u00e9cider de la fusionner dans votre base de code.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Stockez les secrets dans GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Stockez les secrets dans GitHub.<\/figcaption><\/figure>\n<p>Lorsque vous fusionnez la demande d&rsquo;extraction. Naviguez vers l&rsquo;onglet <strong>Actions<\/strong> de votre d\u00e9p\u00f4t GitHub et vous verrez alors le flux de travail CI\/CD en cours d&rsquo;ex\u00e9cution.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/github-actions-summary.jpg\" alt=\"R\u00e9sum\u00e9 des actions GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">R\u00e9sum\u00e9 des actions GitHub.<\/figcaption><\/figure>\n<p>Vous pouvez cliquer sur chaque t\u00e2che pour obtenir plus de d\u00e9tails \u00e0 son sujet (c&rsquo;est pourquoi vous devez donner \u00e0 chaque \u00e9tape de votre t\u00e2che une description significative).<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/ci-steps-details.jpg\" alt=\"D\u00e9tails des \u00e9tapes CI.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">D\u00e9tails des \u00e9tapes CI.<\/figcaption><\/figure>\n<h2>Renforcer le flux de travail des demandes d&rsquo;extraction sur GitHub<\/h2>\n<p>Pour assurer une gestion efficace du code et de la collaboration dans les d\u00e9p\u00f4ts GitHub, il est utile d&rsquo;appliquer un flux de demandes d&rsquo;extraction et de bloquer les livraisons directes \u00e0 la branche principale. Cette approche \u00e9tablit un processus de d\u00e9veloppement contr\u00f4l\u00e9 et organis\u00e9, exigeant que toutes les modifications fassent l&rsquo;objet de demandes d&rsquo;extraction et de r\u00e9visions avant d&rsquo;\u00eatre fusionn\u00e9es dans la branche principale.<\/p>\n<p>En adoptant cette pratique, les \u00e9quipes de d\u00e9veloppement peuvent am\u00e9liorer la qualit\u00e9 du code, minimiser le risque d&rsquo;introduction de bogues et conserver un historique transparent des modifications.<\/p>\n<p>Voici comment configurer l&rsquo;application du flux de travail des demandes d&rsquo;extraction :<\/p>\n<ol start=\"1\">\n<li>Cliquez sur l&rsquo;onglet <strong>R\u00e9glages<\/strong> dans votre d\u00e9p\u00f4t GitHub.<\/li>\n<li>Sous <strong>Code et automatisation<\/strong>, s\u00e9lectionnez <strong>Branches<\/strong> dans les options de la colonne lat\u00e9rale.<\/li>\n<li>Si aucune r\u00e8gle n&rsquo;existe, cliquez sur <strong>Ajouter une r\u00e8gle de protection des branches<\/strong>.<\/li>\n<li>Donnez un nom \u00e0 la r\u00e8gle, puis cochez la case <strong>Exiger une demande d&rsquo;extraction avant de fusionner<\/strong>. Cela affichera plus d&rsquo;options pour la configuration.<\/li>\n<li>Cochez \u00e9galement la case <strong>Exiger que les v\u00e9rifications d&rsquo;\u00e9tat soient r\u00e9ussies avant de fusionner<\/strong>.<\/li>\n<li>Personnalisez les options suppl\u00e9mentaires en fonction de vos pr\u00e9f\u00e9rences et de vos besoins.<\/li>\n<li>Cliquez sur le bouton <strong>Cr\u00e9er<\/strong> pour enregistrer la r\u00e8gle.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/08\/enforcing-pull-request-workflow-on-github.jpg\" alt=\"Renforcer le flux de travail des demandes d'extraction sur GitHub.\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Renforcer le flux de travail des demandes d&rsquo;extraction sur GitHub.<\/figcaption><\/figure>\n<p>En suivant ces \u00e9tapes, vous avez r\u00e9ussi \u00e0 configurer une r\u00e8gle pour appliquer le flux de travail des demandes d&rsquo;extraction dans votre d\u00e9p\u00f4t GitHub. Cela garantit que toutes les modifications sont soumises \u00e0 une r\u00e9vision et \u00e0 des contr\u00f4les automatis\u00e9s avant d&rsquo;\u00eatre fusionn\u00e9es dans la branche principale, ce qui favorise un environnement de d\u00e9veloppement plus fiable et plus collaboratif.<\/p>\n<h2>R\u00e9sum\u00e9<\/h2>\n<p>En combinant la puissance des actions GitHub et de l&rsquo;API Kinsta, vous pouvez rationaliser votre flux de d\u00e9veloppement et favoriser un environnement collaboratif et efficace pour votre \u00e9quipe de d\u00e9veloppement.<\/p>\n<p>Les d\u00e9veloppeurs peuvent contribuer au code en toute confiance, sachant qu&rsquo;il sera test\u00e9 en profondeur avant d&rsquo;atteindre la production, et les parties prenantes peuvent avoir l&rsquo;esprit tranquille en sachant que le processus de d\u00e9ploiement est bien contr\u00f4l\u00e9 et exempt d&rsquo;erreurs.<\/p>\n<p><em>Comment utilisez-vous l&rsquo;API Kinsta ? Quels sont les points d&rsquo;e terminaison que vous aimeriez voir ajout\u00e9s \u00e0 l&rsquo;API ? Quel tutoriel relatif \u00e0 l&rsquo;API Kinsta aimeriez-vous lire ensuite ?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans le monde rapide du d\u00e9veloppement web, l&rsquo;int\u00e9gration et le d\u00e9ploiement continus (CI\/CD) sont devenus des pratiques indispensables pour fournir efficacement des logiciels de haute qualit\u00e9. &#8230;<\/p>\n","protected":false},"author":287,"featured_media":72119,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[953,971],"class_list":["post-72118","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api","topic-git"],"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>Cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l&#039;API Kinsta<\/title>\n<meta name=\"description\" content=\"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l&#039;API Kinsta.\" \/>\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\/configurer-pipeline-ci-cd\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comment cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l&#039;API Kinsta\" \/>\n<meta property=\"og:description\" content=\"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l&#039;API Kinsta.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/\" \/>\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=\"2023-08-21T13:10:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T05:12:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\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=\"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l&#039;API Kinsta.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-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=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Comment cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l&rsquo;API Kinsta\",\"datePublished\":\"2023-08-21T13:10:02+00:00\",\"dateModified\":\"2023-08-22T05:12:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/\"},\"wordCount\":3489,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/\",\"url\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/\",\"name\":\"Cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l'API Kinsta\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/fr\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"datePublished\":\"2023-08-21T13:10:02+00:00\",\"dateModified\":\"2023-08-22T05:12:02+00:00\",\"description\":\"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l'API Kinsta.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#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 cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l&rsquo;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":"Cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l'API Kinsta","description":"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l'API Kinsta.","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\/configurer-pipeline-ci-cd\/","og_locale":"fr_FR","og_type":"article","og_title":"Comment cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l'API Kinsta","og_description":"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l'API Kinsta.","og_url":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstafrance\/","article_published_time":"2023-08-21T13:10:02+00:00","article_modified_time":"2023-08-22T05:12:02+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l'API Kinsta.","twitter_image":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@kinsta_fr","twitter_misc":{"\u00c9crit par":"Joel Olawanle","Dur\u00e9e de lecture estim\u00e9e":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinsta.com\/fr\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Comment cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l&rsquo;API Kinsta","datePublished":"2023-08-21T13:10:02+00:00","dateModified":"2023-08-22T05:12:02+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/"},"wordCount":3489,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/fr\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/","url":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/","name":"Cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l'API Kinsta","isPartOf":{"@id":"https:\/\/kinsta.com\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","datePublished":"2023-08-21T13:10:02+00:00","dateModified":"2023-08-22T05:12:02+00:00","description":"Apprenez \u00e0 configurer efficacement un pipeline CI\/CD performant avec GitHub Actions et \u00e0 exploiter tout le potentiel de l'API Kinsta.","breadcrumb":{"@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#primaryimage","url":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","contentUrl":"https:\/\/kinsta.com\/fr\/wp-content\/uploads\/sites\/4\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/fr\/blog\/configurer-pipeline-ci-cd\/#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 cr\u00e9er un pipeline CI\/CD avec les actions GitHub et l&rsquo;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\/72118","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=72118"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/72118\/revisions"}],"predecessor-version":[{"id":72136,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/posts\/72118\/revisions\/72136"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/translations\/nl"},{"href":"https:\/\/kinsta.com\/fr\/wp-json\/kinsta\/v1\/posts\/72118\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media\/72119"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/media?parent=72118"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/tags?post=72118"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/fr\/wp-json\/wp\/v2\/topic?post=72118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}