{"id":65104,"date":"2023-08-21T14:08:01","date_gmt":"2023-08-21T13:08:01","guid":{"rendered":"https:\/\/kinqsta.com\/de\/?p=65104&#038;preview=true&#038;preview_id=65104"},"modified":"2023-08-29T13:41:20","modified_gmt":"2023-08-29T12:41:20","slug":"ci-cd-pipeline-github-aktionen-erstellen","status":"publish","type":"post","link":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/","title":{"rendered":"Wie man eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt"},"content":{"rendered":"<p>In der schnelllebigen Welt der <a href=\"https:\/\/kinqsta.com\/web-development\/\">Webentwicklung<\/a> sind kontinuierliche Integration und kontinuierliche Bereitstellung (<a href=\"https:\/\/kinqsta.com\/de\/blog\/devops-tools\/#devops-pipeline-cicd-tools\">CI\/CD<\/a>) zu unverzichtbaren Praktiken f\u00fcr die effiziente Bereitstellung hochwertiger Software geworden. CI\/CD erm\u00f6glicht es Entwicklern, den Prozess des Erstellens, Testens und Verteilens von Code\u00e4nderungen zu automatisieren, das Risiko menschlicher Fehler zu verringern und schnellere Iterationen zu erm\u00f6glichen. In diesem Artikel erf\u00e4hrst du, warum CI\/CD so wichtig ist, wie du eine CI-Pipeline erstellst und wie du die kontinuierliche Bereitstellung in deiner CI-Pipeline mit der <a href=\"https:\/\/kinqsta.com\/de\/docs\/kinsta-api\/\">Kinsta-API<\/a> programmatisch einrichtest &#8211; alles mit GitHub Actions in deinem <a href=\"https:\/\/kinqsta.com\/de\/blog\/wie-man-code-auf-github-veroeffentlicht\/\">GitHub<\/a>-Repository. <div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Warum CI\/CD?<\/h2>\n<p>Die <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwendungs-Hosting<\/a>-Plattform von Kinsta bietet seit jeher eine Option f\u00fcr die automatische Bereitstellung, die immer dann ausgel\u00f6st wird, wenn eine \u00c4nderung an einem bestimmten Branch in deinem gehosteten Git-Repository vorgenommen wird. F\u00fcr gro\u00dfe Projekte mit mehreren Teammitgliedern ist dies jedoch nicht unbedingt ideal. Viele <a href=\"https:\/\/kinqsta.com\/de\/blog\/arten-von-entwicklern\/\">Entwickler\/innen<\/a> neigen dazu, die automatische Bereitstellung aus verschiedenen Gr\u00fcnden nicht zu aktivieren.<\/p>\n<p>Ein Grund daf\u00fcr ist, dass in einer kollaborativen Umgebung, in der mehrere Entwickler\/innen am selben Projekt arbeiten, automatische Verteilungen, die durch die \u00c4nderung eines\/r Entwicklers\/in am Repository ausgel\u00f6st werden, zu Instabilit\u00e4t und unvorhergesehenen Problemen f\u00fchren k\u00f6nnen. Ohne eine ordnungsgem\u00e4\u00dfe Pr\u00fcfung und Validierung kann selbst eine kleine Code\u00e4nderung die Live-Site st\u00f6ren, was zu Ausfallzeiten und negativen Nutzererfahrungen f\u00fchren kann.<\/p>\n<p>An dieser Stelle kommt eine CI\/CD-Pipeline ins Spiel. Mit einem sorgf\u00e4ltig orchestrierten CI\/CD-Workflow k\u00f6nnen Entwickler\/innen sicherstellen, dass Code\u00e4nderungen getestet und validiert werden, bevor sie auf der Live-Site eingesetzt werden. Es gibt viele Tools f\u00fcr die Implementierung von CI\/CD in der Softwareentwicklung. In diesem Tutorial werden wir <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/understanding-github-actions\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub Actions<\/a> verwenden.<\/p>\n<h2>Was ist GitHub Actions?<\/h2>\n<p>GitHub Actions ist ein leistungsstarkes Automatisierungstool von GitHub. Es bietet Entwicklern die M\u00f6glichkeit, verschiedene Aufgaben, Prozesse und Arbeitsabl\u00e4ufe innerhalb ihrer Softwareentwicklungsprojekte zu automatisieren. Es l\u00e4sst sich in die GitHub-Repositories integrieren und ist daher einfach zu bedienen.<\/p>\n<p>Mit GitHub Actions und der <a href=\"https:\/\/api-docs.kinqsta.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Kinsta-API<\/a> kannst du benutzerdefinierte Workflows definieren, die zu deinen Projektanforderungen passen. Du kannst eine CI-Pipeline einrichten, die deine Anwendung testet und die Bereitstellung auf Kinsta anst\u00f6\u00dft.<\/p>\n<h2>Erste Schritte mit GitHub Actions<\/h2>\n<p>GitHub Actions basiert auf dem Konzept der Workflows, d.h. auf automatisierten Aufgaben, die durch bestimmte Ereignisse ausgel\u00f6st oder in regelm\u00e4\u00dfigen Abst\u00e4nden geplant werden. Zu diesen Ereignissen k\u00f6nnen Code-Pushes, Pull-Requests, das Erstellen von Problemen und vieles mehr geh\u00f6ren. Wenn eines dieser Ereignisse eintritt, f\u00fchrt GitHub Actions automatisch einen zugeh\u00f6rigen Workflow aus, der eine Reihe von vordefinierten Schritten ausf\u00fchrt.<\/p>\n<p>Jeder Schritt im Workflow steht f\u00fcr eine bestimmte Aktion, z. B. das Erstellen des Codes, das Ausf\u00fchren von Tests, das Verteilen oder das Senden von Benachrichtigungen. Lass uns einen Workflow mit drei Aufgaben erstellen:<\/p>\n<ol start=\"1\">\n<li>Syntax mit ESLint pr\u00fcfen<\/li>\n<li>Tests ausf\u00fchren<\/li>\n<li>Anwendung erneut bereitstellen<\/li>\n<\/ol>\n<h3>Schritt 1: Richte dein GitHub-Repository ein<\/h3>\n<p>Um mit GitHub Actions loszulegen, brauchst du ein GitHub Repository.<\/p>\n<p>Hier verwenden wir <a href=\"https:\/\/github.com\/kinsta\/chatgpt-clone\" target=\"_blank\" rel=\"noopener noreferrer\">dieses GitHub-Repository<\/a>, das f\u00fcr das Tutorial <a href=\"https:\/\/kinqsta.com\/de\/blog\/chatgpt-klon\/\">How To Build and Deploy a ChatGPT Clone Application With React and OpenAI API<\/a> entwickelt wurde.<\/p>\n<p>Du kannst das Repository selbst verwenden, indem du auf GitHub dorthin navigierst und ausw\u00e4hlst: <strong>Diese Vorlage verwenden<\/strong> &gt; <strong>Ein neues Repository erstellen<\/strong>.<\/p>\n<p>In dieser React-Anwendung werden Unit-Tests erstellt, um jede Komponente zu testen. ESLint wird auch verwendet, um eine perfekte Syntax und Codeformatierung zu gew\u00e4hrleisten. Die CI-Pipeline blockiert die Bereitstellung, wenn ein Pull Request oder zusammengef\u00fchrter Code, der in das Repository eingestellt wird, die Workflow-Tests nicht besteht.<\/p>\n<h3>Schritt 2: Erstellen einer Workflow-Datei<\/h3>\n<p>Definiere deinen Workflow, indem du eine YAML-Datei im Verzeichnis <strong>.github\/workflows<\/strong> deines Repositorys erstellst. Dieses Verzeichnis sollte sich auf der Stammebene deines Projektarchivs befinden. Die Namenskonvention f\u00fcr Workflow-Dateien ist <strong>Name-des-Workflows.yml<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Erstelle in deinem Repository ein <strong>.github<\/strong>-Verzeichnis.<\/li>\n<li>Erstelle innerhalb des <strong>.github<\/strong>-Verzeichnisses ein neues Verzeichnis namens <strong>workflows<\/strong>.<\/li>\n<li>Im Verzeichnis workflows erstellst du eine neue Datei mit dem Namen <strong>build-test-deploy.yml<\/strong>.<\/li>\n<\/ol>\n<h3>Schritt 3: Schreibe den CI\/CD-Workflow<\/h3>\n<p>Nachdem du deine Workflow-Datei erstellt hast, definierst du einen Workflow mit den notwendigen Schritten, um die Syntax mit ESLint zu pr\u00fcfen, Tests durchzuf\u00fchren und die Anwendung einzusetzen.<\/p>\n<h4>CI-Ereignis erstellen<\/h4>\n<p>Wenn du eine CI-Pipeline erstellst, musst du dem Workflow zun\u00e4chst einen Namen geben und dann das Ereignis festlegen, das den Workflow ausl\u00f6sen soll. In diesem Beispiel sind die beiden Ereignisse eine Pull-Anforderung und ein Push auf den Hauptzweig.<\/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>Wenn du regelm\u00e4\u00dfige Jobs (CRON-Jobs) f\u00fcr bestimmte Aufgaben planen m\u00f6chtest, kannst du sie dem Workflow hinzuf\u00fcgen. Du k\u00f6nntest zum Beispiel bestimmte Aufgaben wie Datenbanksicherungen, Datenbereinigung oder andere regelm\u00e4\u00dfige Wartungsaufgaben ausf\u00fchren.<\/p>\n<p>Hier ist ein Beispiel daf\u00fcr, wie du einen CRON-Job zum Workflow hinzuf\u00fcgen kannst:<\/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>Im obigen Beispiel wird der Workflow jeden Tag um Mitternacht (UTC-Zeit) ausgel\u00f6st, da der Cron-Zeitplan auf <code>0 0 * * *<\/code> eingestellt ist. Du kannst den Cron-Zeitplan an deine Bed\u00fcrfnisse anpassen.<\/p>\n<p>Ein weiteres Beispiel: Angenommen, du m\u00f6chtest den CI\/CD-Workflow so planen, dass er jeden Montag um 8 Uhr morgens ausgef\u00fchrt wird. Wir k\u00f6nnen einen CRON-Job mit dem Ereignis <code>schedule<\/code> einrichten:<\/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>Die Zeitplansyntax, die im <code>schedule<\/code> Event f\u00fcr GitHub Actions Workflows verwendet wird, basiert auf der UNIX cron Syntax. Sie erm\u00f6glicht es dir, bestimmte Zeiten oder Intervalle festzulegen, in denen dein Workflow automatisch ausgef\u00fchrt werden soll. Die Syntax besteht aus f\u00fcnf Feldern, die verschiedene Aspekte des Zeitplans darstellen. Jedes Feld wird durch ein Leerzeichen getrennt. Das allgemeine Format der Zeitplansyntax ist wie folgt:<\/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>Schauen wir uns die einzelnen Felder an:<\/p>\n<ul>\n<li><strong>Minute (0 &#8211; 59):<\/strong> Die Minute, in der der Cron-Job ausgel\u00f6st wird. Zum Beispiel bedeutet <code>15<\/code>, dass der Workflow in der 15. Minute der Stunde ausgel\u00f6st wird.<\/li>\n<li><strong>Stunde (0 &#8211; 23):<\/strong> Die Stunde, zu der der Cron-Job ausgel\u00f6st wird. Zum Beispiel bedeutet <code>8<\/code>, dass der Arbeitsablauf um 8 Uhr morgens ausgel\u00f6st wird.<\/li>\n<li><strong>Tag des Monats (1 &#8211; 31):<\/strong> Der Tag des Monats, an dem der Cron-Job ausgel\u00f6st wird. Beispiel: <code>1<\/code> bedeutet, dass der Arbeitsablauf am ersten Tag des Monats ausgel\u00f6st wird.<\/li>\n<li><strong>Monat (1 &#8211; 12):<\/strong> Der Monat, in dem der Cron-Job ausgel\u00f6st wird. Zum Beispiel: <code>6<\/code> bedeutet, dass der Arbeitsablauf im Juni ausgel\u00f6st wird.<\/li>\n<li><strong>Wochentag (0 &#8211; 7):<\/strong> Der Wochentag, an dem der Cron-Job ausgel\u00f6st wird. Hier stehen <code>0<\/code> und <code>7<\/code> f\u00fcr den Sonntag, <code>1<\/code> f\u00fcr den Montag und so weiter. <code>4<\/code> bedeutet zum Beispiel, dass der Arbeitsablauf am Donnerstag ausgel\u00f6st wird.<\/li>\n<\/ul>\n<p>Sonderzeichen:<\/p>\n<ul>\n<li><code><strong>*<\/strong><\/code> (Sternchen): Passt zu jedem Wert in diesem Feld. Zum Beispiel bedeutet <code>*<\/code> im Feld Minute, dass der Workflow jede Minute ausgel\u00f6st wird.<\/li>\n<li><code><strong>*\/n<\/strong><\/code> (Schr\u00e4gstrich): Gibt ein Intervall an. Zum Beispiel bedeutet <code>*\/5<\/code> im Minutenfeld, dass der Workflow alle 5 Minuten ausgel\u00f6st wird.<\/li>\n<li><code><strong>,<\/strong><\/code> (Komma): Gibt mehrere spezifische Werte an. Zum Beispiel bedeutet <code>1,15,30<\/code> im Minutenfeld, dass der Arbeitsablauf zur ersten, 15. und 30. Minute ausgel\u00f6st wird.<\/li>\n<li><code><strong>-<\/strong><\/code> (Bindestrich): Gibt eine Reihe von Werten an. Zum Beispiel bedeutet <code>1-5<\/code> im Feld Wochentag, dass der Arbeitsablauf von Montag bis Freitag (1 bis 5) ausgel\u00f6st wird.<\/li>\n<li><code><strong>?<\/strong><\/code> (Fragezeichen): Wird verwendet, um keinen bestimmten Wert anzugeben. Es wird h\u00e4ufig im Feld f\u00fcr den Wochentag verwendet, wenn der Tag des Monats angegeben ist. Zum Beispiel bedeutet <code>?<\/code> im Feld f\u00fcr den Wochentag und <code>15<\/code> im Feld f\u00fcr den Monat, dass der Arbeitsablauf am 15. Tag des Monats, unabh\u00e4ngig vom Wochentag.<\/li>\n<\/ul>\n<h4>Erstellen eines CI-Jobs zur \u00dcberpr\u00fcfung der Syntax mit ESLint<\/h4>\n<p>Um den CI-Prozess einzurichten, erstellen wir die notwendigen Jobs oder Aufgaben. Jeder Job sollte einen klaren und verst\u00e4ndlichen Namen haben. Nennen wir den ersten Job <code>eslint<\/code>, da er die \u00dcberpr\u00fcfung der Codesyntax mit ESLint beinhaltet.<\/p>\n<p>Au\u00dferdem k\u00f6nnen wir eine menschenlesbare Beschreibung angeben, obwohl dieser Teil optional ist. Als N\u00e4chstes legen wir fest, dass der Job in einer Ubuntu-Umgebung laufen soll und verwenden eine Matrixstrategie, um den Code gegen zwei <a href=\"https:\/\/kinqsta.com\/de\/thema\/node-js\/\">Node.js<\/a>-Versionen zu testen: <code>18.x<\/code> und <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>Als N\u00e4chstes definieren wir die Schritte, die der Job &#8222;ESLint&#8220; ausf\u00fchren soll. Diese Schritte umfassen das Auschecken des Codes, das Einrichten der angegebenen Node.js-Version f\u00fcr die Ausf\u00fchrung von ESLint, das Zwischenspeichern von npm-Paketen, das Installieren von Projektabh\u00e4ngigkeiten und schlie\u00dflich das Ausf\u00fchren von ESLint zur \u00dcberpr\u00fcfung der Codesyntax.<\/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>Im obigen Arbeitsablauf ist jeder Schritt mit einer Beschreibung und einem Namen versehen, damit die Fehlerquelle bei der \u00dcberpr\u00fcfung des Arbeitsablaufs \u00fcber GitHub Actions leicht zu identifizieren ist. Im dritten Schritt verwenden wir den Befehl <code>npm ci<\/code>, um die Abh\u00e4ngigkeiten zu installieren. Dieser ist <code>npm install<\/code> vorzuziehen, da er eine saubere Installation durchf\u00fchrt. Au\u00dferdem setzt der letzte Schritt, die Ausf\u00fchrung von ESLint mit <code>npm run lint<\/code>, voraus, dass du diesen Befehl in deiner <strong>package.json-Datei<\/strong> konfiguriert hast.<\/p>\n<p>Nachfolgend findest du die vollst\u00e4ndige Aufgabe zur \u00dcberpr\u00fcfung der Codesyntax mit 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>CI-Job zum Ausf\u00fchren von Tests erstellen<\/h4>\n<p>Um den CI-Job zur Ausf\u00fchrung von Tests hinzuzuf\u00fcgen, definierst du zun\u00e4chst den Job und gibst ihm einen beschreibenden Namen, z. B. <code>tests<\/code>. Au\u00dferdem geben wir an, dass dieser Job vom Job <code>eslint<\/code> abh\u00e4ngt, d.h. der Job <code>eslint<\/code> wird zuerst ausgef\u00fchrt, bevor der Job <code>tests<\/code> ausgef\u00fchrt wird. Durch diese Abh\u00e4ngigkeit wird sichergestellt, dass der Code auf Syntaxfehler gepr\u00fcft wird, bevor die Tests ausgef\u00fchrt werden.<\/p>\n<pre><code class=\"language-yaml\">  tests:\n    name: Run Tests\n    needs: eslint\n    runs-on: ubuntu-latest<\/code><\/pre>\n<p>Als N\u00e4chstes definierst du die Schritte f\u00fcr den Job <code>tests<\/code>. \u00c4hnlich wie beim vorigen Job checken wir den Code aus, richten die Node.js-Version <code>18.x<\/code> ein, um die Tests auszuf\u00fchren, installieren die Projektabh\u00e4ngigkeiten mit <code>npm ci<\/code> und f\u00fchren die Tests dann mit dem Befehl <code>npm run test<\/code> aus.<\/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>CI-Job f\u00fcr die Bereitstellung Deployment mit der Kinsta-API erstellen<\/h4>\n<p>Um den CI-Job f\u00fcr die Bereitstellung \u00fcber die Kinsta-API zu erstellen, definieren wir den Job und nennen ihn <code>deploy<\/code>. Dieser Job ist von den Jobs <code>eslint<\/code> und <code>tests<\/code> abh\u00e4ngig und stellt sicher, dass die Bereitstellung erst ausgef\u00fchrt wird, nachdem der Code auf Syntaxfehler gepr\u00fcft wurde und die Tests bestanden hat. Wir richten den Job so ein, dass er in einer <a href=\"https:\/\/kinqsta.com\/de\/blog\/ubuntu-version-ueberpruefen\/\">Ubuntu-Umgebung<\/a> mit der neuesten verf\u00fcgbaren Version l\u00e4uft.<\/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>Als N\u00e4chstes legst du die Schritte fest. In diesem Fall f\u00fchrst du einen cURL-Befehl aus, um programmatisch mit der Kinsta-API zu interagieren und eine Neuverteilung auszul\u00f6sen. Zun\u00e4chst wollen wir die Kinsta-API verstehen, die verschiedenen Informationen, die f\u00fcr die Interaktion mit der <a href=\"https:\/\/kinqsta.com\/de\/blog\/api-endpunkt\/\">API<\/a> ben\u00f6tigt werden, und wie du wichtige Informationen, die mit der API verbunden sind &#8211; wie den <a href=\"https:\/\/kinqsta.com\/de\/blog\/kinsta-api-schluessel\/\">API-Schl\u00fcssel<\/a> &#8211; sicher auf GitHub abrufst und speicherst.<\/p>\n<h2>Die Kinsta-API verstehen<\/h2>\n<p>Die <a href=\"https:\/\/kinqsta.com\/de\/changelog\/kinsta-api\/\">Kinsta-API<\/a> ist ein leistungsstarkes Werkzeug, mit dem du programmgesteuert mit den Diensten von Kinsta interagieren kannst. Um die API zu nutzen, musst du ein Konto mit mindestens einer WordPress-Site, einer <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwendung<\/a> oder einer <a href=\"https:\/\/sevalla.com\/database-hosting\/\">Datenbank<\/a> in MyKinsta haben. Au\u00dferdem musst du einen API-Schl\u00fcssel erstellen, um dich zu authentifizieren und \u00fcber die API auf dein Konto zuzugreifen. So generierst du einen API-Schl\u00fcssel:<\/p>\n<ol start=\"1\">\n<li>Gehe zu deinem MyKinsta-Dashboard.<\/li>\n<li>Navigiere zur Seite mit den <strong>API-Schl\u00fcsseln <\/strong>(<strong>Dein Name<\/strong> &gt; <strong>Unternehmenseinstellungen<\/strong> &gt; <strong>API-Schl\u00fcssel<\/strong>).<\/li>\n<li>Klicke auf <strong>API-Schl\u00fcssel erstellen<\/strong>.<\/li>\n<li>W\u00e4hle ein Ablaufdatum oder lege ein benutzerdefiniertes Startdatum und die Anzahl der Stunden fest, nach denen der Schl\u00fcssel abl\u00e4uft.<\/li>\n<li>Gib dem Schl\u00fcssel einen eindeutigen Namen.<\/li>\n<li>Klicke auf <b>Generieren<\/b>.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/create-api-key-on-mykinsta.jpg\" alt=\"API-Schl\u00fcssel auf MyKinsta erstellen\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">API-Schl\u00fcssel auf MyKinsta erstellen<\/figcaption><\/figure>\n<p>Nachdem du einen API-Schl\u00fcssel erstellt hast, kopiere ihn und bewahre ihn an einem sicheren Ort auf (wir empfehlen die Verwendung eines <a href=\"https:\/\/kinqsta.com\/de\/blog\/passwort-manager\/\">Passwortmanagers<\/a>), da er <strong>nur dann<\/strong> in MyKinsta angezeigt wird.<\/p>\n<h3>So l\u00f6st du die Bereitstellung mit der Kinsta-API aus<\/h3>\n<p>Um eine Anwendung \u00fcber die API auf Kinsta bereitzustellen, brauchst du zwei Parameter: die Anwendungs-ID und die Branche. Du kannst die ID deiner Anwendung programmatisch abrufen, indem du zuerst die Liste deiner Anwendungen abrufst, die Details zu jeder Anwendung, einschlie\u00dflich ihrer ID, enth\u00e4lt. Nachdem du die notwendigen Informationen erhalten hast, kannst du eine <a href=\"https:\/\/kinqsta.com\/de\/blog\/javascript-http-anfrage\/\">POST-Anfrage<\/a> an den API-Endpunkt <a href=\"https:\/\/api-docs.kinqsta.com\/tag\/Application-Deployments#operation\/manualDeployApplication\" target=\"_blank\" rel=\"noopener noreferrer\">\/applications\/deployments<\/a> stellen. F\u00fcr die CI-Pipeline verwenden wir cURL, ein Kommandozeilentool f\u00fcr die Interaktion mit URLs.<\/p>\n<pre><code class=\"language-yaml\">curl -i -X POST \n  https:\/\/api.kinqsta.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>Ausl\u00f6sen der Bereitstellung mit cURL in der CI\/CD-Pipeline<\/h2>\n<p>Um die Bereitstellung mit der Kinsta-API auszul\u00f6sen, f\u00fcgst du den cURL-Befehl zum Befehl <code>run<\/code> f\u00fcr deine CI-Pipeline hinzu. Es ist jedoch wichtig, dass du deinen API-Schl\u00fcssel und deine Anwendungs-ID sicher speicherst. Um <a href=\"https:\/\/kinqsta.com\/de\/blog\/github-actions-secret\/\">Geheimnisse auf GitHub zu speichern<\/a> und sie in GitHub Actions zu verwenden, befolge diese Schritte:<\/p>\n<ol start=\"1\">\n<li>Navigiere zu dem Repository, in dem du das Geheimnis einrichten m\u00f6chtest.<\/li>\n<li>Klicke auf die Registerkarte <strong>Einstellungen<\/strong> im Men\u00fc des Repositorys.<\/li>\n<li>W\u00e4hle in der linken Seitenleiste unter der Kategorie <strong>Optionen<\/strong> die Option <strong>Geheimnisse<\/strong>.<\/li>\n<li>Klicke auf <strong>Neues Repository-Geheimnis<\/strong>.<\/li>\n<li>Gib einen Namen f\u00fcr dein Geheimnis ein (z. B. <code>KINSTA_API_KEY<\/code>) und gib deinen Kinsta-API-Schl\u00fcssel in das Feld <strong>Wert<\/strong> ein.<\/li>\n<li>Nachdem du den Namen und den Wert eingegeben hast, klicke auf die Schaltfl\u00e4che <strong>Geheimnis hinzuf\u00fcgen<\/strong>, um es zu speichern.<\/li>\n<li>Wiederhole den Vorgang f\u00fcr andere Geheimnisse.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Speichere Geheimnisse in GitHub\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Speichere Geheimnisse in GitHub<\/figcaption><\/figure>\n<p>Sobald du die Geheimnisse hinzugef\u00fcgt hast, kannst du sie in deinem GitHub Actions Workflow mit der <code>${{ secrets.SECRET_NAME }}<\/code> Syntax referenzieren.<\/p>\n<p>Jetzt k\u00f6nnen wir den <code>deploy<\/code> Job f\u00fcr deine GitHub Actions CI\/CD-Pipeline fertigstellen. Definiere die Schritte wie zuvor, mit einem einzigen Schritt f\u00fcr die Bereitstellung auf Kinsta. Definiere zun\u00e4chst die Secrets im Befehl <code>env<\/code> und f\u00fcge dann den cURL-Befehl hinzu, um die Bereitstellung auszuf\u00fchren.<\/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.kinqsta.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>Im cURL-Befehl siehst du, dass die Umgebungsvariablen innerhalb des Befehls hinzugef\u00fcgt werden, damit w\u00e4hrend des Bereitstellungs-Prozesses sicher auf die Secrets zugegriffen werden kann.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p>Dieser <code>deploy<\/code> CI-Job ist so konzipiert, dass er den Bereitstellungsprozess \u00fcber die Kinsta-API ausf\u00fchrt. Er zeigt einen erfolgreichen Status an, auch wenn der eigentliche Verteilungsprozess auf Probleme oder Fehler st\u00f6\u00dft. Der Grund daf\u00fcr ist, dass die Antwort des Workflows auf dem erfolgreichen Start der Bereitstellung basiert und nicht auf deren Abschluss oder Status.<\/p>\n<\/aside>\n\n<p>So sieht dein endg\u00fcltiger CI\/CD-Workflow aus:<\/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.kinqsta.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>Kopiere den angegebenen Workflow und f\u00fcge ihn in deine <strong>build-test-deploy.yml<\/strong>-Datei ein. Als N\u00e4chstes stellst du einen Pull Request, um diese Datei dem Hauptzweig deines Repositorys hinzuzuf\u00fcgen. Denke daran, dass dieser Pull Request den Workflow automatisch ausl\u00f6st.<\/p>\n<p>So kannst du die \u00c4nderungen an deinem Repository \u00fcberpr\u00fcfen und sicherstellen, dass jede neue \u00c4nderung in der Pull-Anforderung den festgelegten Pr\u00fcfungen entspricht, bevor du entscheidest, ob sie in deine Codebasis aufgenommen werden soll.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/storing-secrets-on-github.jpg\" alt=\"Speichere Geheimnisse in GitHub\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Speichere Geheimnisse in GitHub<\/figcaption><\/figure>\n<p>Wenn du den Pull Request zusammenf\u00fchrst. Gehe zur Registerkarte <strong>Aktionen<\/strong>\u00a0deines GitHub-Repositorys und du wirst sehen, dass der CI\/CD-Workflow l\u00e4uft.<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/github-actions-summary.jpg\" alt=\"GitHub Actions Zusammenfassung\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">GitHub Actions Zusammenfassung<\/figcaption><\/figure>\n<p>Du kannst auf jeden Job klicken, um mehr Details \u00fcber den Job zu erfahren (deshalb musst du jedem Schritt deines Jobs eine aussagekr\u00e4ftige Beschreibung geben).<\/p>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/ci-steps-details.jpg\" alt=\"CI-Schritte im Detail\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">CI-Schritte im Detail<\/figcaption><\/figure>\n<h2>Pull Request Workflow auf GitHub erzwingen<\/h2>\n<p>Um eine effektive Codeverwaltung und Zusammenarbeit in GitHub-Repositories zu gew\u00e4hrleisten, ist es sinnvoll, einen Pull-Request-Workflow zu erzwingen und direkte Commits an den Hauptzweig zu blockieren. Auf diese Weise wird ein kontrollierter und organisierter Entwicklungsprozess geschaffen, bei dem alle \u00c4nderungen Pull-Requests und \u00dcberpr\u00fcfungen durchlaufen m\u00fcssen, bevor sie im Hauptzweig zusammengef\u00fchrt werden.<\/p>\n<p>Auf diese Weise k\u00f6nnen Entwicklungsteams die Codequalit\u00e4t verbessern, das Risiko von Fehlern minimieren und eine transparente \u00c4nderungshistorie aufrechterhalten.<\/p>\n<p>Hier erf\u00e4hrst du, wie du den Pull-Request-Workflow einrichtest:<\/p>\n<ol start=\"1\">\n<li>Klicke auf die Registerkarte <strong>Einstellungen<\/strong> in deinem GitHub-Repository.<\/li>\n<li>W\u00e4hle unter <strong>Code und Automatisierung<\/strong> in der Seitenleiste die Option <strong>Zweige<\/strong>.<\/li>\n<li>Wenn keine Regeln vorhanden sind, klicke auf <strong>Zweigschutzregel hinzuf\u00fcgen<\/strong>.<\/li>\n<li>Gib einen Namen f\u00fcr die Regel ein und aktiviere dann das Kontrollk\u00e4stchen <strong>Pull Request vor dem Zusammenf\u00fchren anfordern<\/strong>. Daraufhin werden weitere Optionen zur Konfiguration angezeigt.<\/li>\n<li>Aktiviere auch das Kontrollk\u00e4stchen <strong>Statuspr\u00fcfung vor dem Zusammenf\u00fchren erforderlich<\/strong>.<\/li>\n<li>Passe weitere Optionen nach deinen W\u00fcnschen und Anforderungen an.<\/li>\n<li>Klicke auf die Schaltfl\u00e4che <strong>Erstellen<\/strong>, um die Regel zu speichern.<\/li>\n<\/ol>\n<figure style=\"width: 1600px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinqsta.com\/wp-content\/uploads\/2023\/08\/enforcing-pull-request-workflow-on-github.jpg\" alt=\"Pull-Request-Workflow auf GitHub erzwingen\" width=\"1600\" height=\"360\"><figcaption class=\"wp-caption-text\">Pull-Request-Workflow auf GitHub erzwingen<\/figcaption><\/figure>\n<p>Wenn du diese Schritte befolgt hast, hast du erfolgreich eine Regel zur Durchsetzung des Pull-Request-Workflows in deinem GitHub-Repository eingerichtet. Dadurch wird sichergestellt, dass alle \u00c4nderungen \u00fcberpr\u00fcft und automatisch kontrolliert werden, bevor sie in den Hauptzweig eingef\u00fcgt werden, was eine zuverl\u00e4ssigere und kollaborative Entwicklungsumgebung f\u00f6rdert.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Durch die Kombination von GitHub Actions und der Kinsta-API kannst du deinen Entwicklungs-Workflow rationalisieren und eine kollaborative und effiziente Umgebung f\u00fcr dein Entwicklungsteam schaffen.<\/p>\n<p>Die Entwickler k\u00f6nnen vertrauensvoll Code beisteuern, weil sie wissen, dass er gr\u00fcndlich getestet wird, bevor er in die Produktion gelangt. Die Beteiligten k\u00f6nnen sich darauf verlassen, dass der Bereitstellungsprozess gut kontrolliert und fehlerresistent ist.<\/p>\n<p><em>Wie nutzt du die Kinsta-API? Welche Endpunkte w\u00fcrdest du gerne zur API hinzugef\u00fcgt sehen? Welches Kinsta-API-Tutorial w\u00fcrdest du gerne als n\u00e4chstes lesen?<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In der schnelllebigen Welt der Webentwicklung sind kontinuierliche Integration und kontinuierliche Bereitstellung (CI\/CD) zu unverzichtbaren Praktiken f\u00fcr die effiziente Bereitstellung hochwertiger Software geworden. CI\/CD erm\u00f6glicht es &#8230;<\/p>\n","protected":false},"author":287,"featured_media":65105,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[925,943],"class_list":["post-65104","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>Eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt<\/title>\n<meta name=\"description\" content=\"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wie man eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt\" \/>\n<meta property=\"og:description\" content=\"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-21T13:08:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-29T12:41:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/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=\"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/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_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joel Olawanle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"15\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\"},\"author\":{\"name\":\"Joel Olawanle\",\"@id\":\"https:\/\/kinqsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\"},\"headline\":\"Wie man eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt\",\"datePublished\":\"2023-08-21T13:08:01+00:00\",\"dateModified\":\"2023-08-29T12:41:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\"},\"wordCount\":2757,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\",\"url\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\",\"name\":\"Eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt\",\"isPartOf\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"datePublished\":\"2023-08-21T13:08:01+00:00\",\"dateModified\":\"2023-08-29T12:41:20+00:00\",\"description\":\"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage\",\"url\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"contentUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinqsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinqsta.com\/de\/thema\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Wie man eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinqsta.com\/de\/#website\",\"url\":\"https:\/\/kinqsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinqsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinqsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinqsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"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:\/\/kinqsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07\",\"name\":\"Joel Olawanle\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinqsta.com\/de\/#\/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:\/\/kinqsta.com\/de\/blog\/author\/joelolawanle\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt","description":"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.","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:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/","og_locale":"de_DE","og_type":"article","og_title":"Wie man eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt","og_description":"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.","og_url":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-08-21T13:08:01+00:00","article_modified_time":"2023-08-29T12:41:20+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","type":"image\/png"}],"author":"Joel Olawanle","twitter_card":"summary_large_image","twitter_description":"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.","twitter_image":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","twitter_creator":"@olawanle_joel","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Joel Olawanle","Gesch\u00e4tzte Lesezeit":"15\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#article","isPartOf":{"@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/"},"author":{"name":"Joel Olawanle","@id":"https:\/\/kinqsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07"},"headline":"Wie man eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt","datePublished":"2023-08-21T13:08:01+00:00","dateModified":"2023-08-29T12:41:20+00:00","mainEntityOfPage":{"@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/"},"wordCount":2757,"commentCount":0,"publisher":{"@id":"https:\/\/kinqsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/","url":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/","name":"Eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt","isPartOf":{"@id":"https:\/\/kinqsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage"},"image":{"@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage"},"thumbnailUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","datePublished":"2023-08-21T13:08:01+00:00","dateModified":"2023-08-29T12:41:20+00:00","description":"Lerne, wie du mit GitHub Actions effizient eine leistungsstarke CI\/CD-Pipeline einrichtest und das volle Potenzial der Kinsta-API ausnutzt.","breadcrumb":{"@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#primaryimage","url":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","contentUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/08\/cd-pipeline-with-github-actions-and-kinsta-api.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinqsta.com\/de\/blog\/ci-cd-pipeline-github-aktionen-erstellen\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinqsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinqsta.com\/de\/thema\/api\/"},{"@type":"ListItem","position":3,"name":"Wie man eine CI\/CD-Pipeline mit GitHub-Aktionen und der Kinsta-API erstellt"}]},{"@type":"WebSite","@id":"https:\/\/kinqsta.com\/de\/#website","url":"https:\/\/kinqsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinqsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinqsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinqsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinqsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinqsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinqsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","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:\/\/kinqsta.com\/de\/#\/schema\/person\/efa7de30245ca15be5ce1dcacff89c07","name":"Joel Olawanle","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinqsta.com\/de\/#\/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:\/\/kinqsta.com\/de\/blog\/author\/joelolawanle\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts\/65104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/users\/287"}],"replies":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/comments?post=65104"}],"version-history":[{"count":7,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts\/65104\/revisions"}],"predecessor-version":[{"id":65253,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/posts\/65104\/revisions\/65253"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/jp"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/translations\/nl"},{"href":"https:\/\/kinqsta.com\/de\/wp-json\/kinsta\/v1\/posts\/65104\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/media\/65105"}],"wp:attachment":[{"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/media?parent=65104"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/tags?post=65104"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinqsta.com\/de\/wp-json\/wp\/v2\/topic?post=65104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}