{"id":33941,"date":"2022-01-19T11:08:12","date_gmt":"2022-01-19T10:08:12","guid":{"rendered":"https:\/\/www.inovex.de\/?p=33941"},"modified":"2022-11-22T10:14:41","modified_gmt":"2022-11-22T09:14:41","slug":"grundlagen-von-github-actions-hands-on-tutorial","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/","title":{"rendered":"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial"},"content":{"rendered":"<p>In diesem Blog-Artikel m\u00f6chte ich euch vorstellen, wie man GitHub Actions einsetzt, damit ihr langweilige repetitive Aufgaben automatisieren und mehr Zeit mit dem Coden verbringen k\u00f6nnt.<!--more--><\/p>\n<p>Falls eure Code Base bereits auf GitHub ist, k\u00f6nnt ihr direkt starten und zuk\u00fcnftig den kompletten Workflow an einem einzigen Ort verwalten. Keine langwierigen Konfigurationen mehr, die \u00fcber verschiedene Plattformen und Dienste verteilt sind.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#Wie-funktioniert-GitHub-Actions\" >Wie funktioniert GitHub Actions?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#Hands-on-Wir-bauen-einen-Workflow\" >Hands-on: Wir bauen einen Workflow!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#Der-Marketplace\" >Der Marketplace<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#Dein-Start\" >Dein Start<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Wie-funktioniert-GitHub-Actions\"><\/span>Wie funktioniert GitHub Actions?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Betrachten wir ein GitHub Repo, k\u00f6nnen verschiedene Events auftreten. Zum Beispiel kann jemand eine Pull-Request erstellen, gibt dem Repo einen Stern oder eine Issue wird erstellt.<\/p>\n<p>Diese Events \u2013 ein <a href=\"https:\/\/docs.github.com\/en\/actions\/learn-github-actions\/events-that-trigger-workflows\" target=\"_blank\" rel=\"noopener\">komplette Liste findet ihr hier<\/a> \u2013 k\u00f6nnen einen oder mehrere Workflows ansto\u00dfen. Workflows laufen auf virtuellen Maschinen in der Cloud und werden von GitHub zur Verf\u00fcgung gestellt. Ihr legt fest, welche Schritte diese Maschinen ausf\u00fchren, damit eure Aufgaben automatisiert ablaufen.<\/p>\n<p>H\u00e4ufig werden mit GitHub-Actions Test-Suiten durchlaufen, Docker Images erstellt und in eine Registry gepusht oder Release-f\u00e4hige Versionen durch einen Security Scan auf Schwachstellen \u00fcberpr\u00fcft.<\/p>\n<p>Um Kosten braucht ihr euch dabei keine Sorgen zu machen, da GitHub ein sehr <a href=\"https:\/\/github.com\/features\/actions#pricing-details\" target=\"_blank\" rel=\"noopener\">gro\u00dfz\u00fcgiges Free-Tier<\/a> hat. \u00d6ffentliche Repositories sind sogar komplett kostenfrei.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Hands-on-Wir-bauen-einen-Workflow\"><\/span>Hands-on: Wir bauen einen Workflow!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Schauen wir uns einen Workflow und seine Erstellung einmal genauer an.<\/p>\n<p>Um einen Workflow f\u00fcr GitHub sichtbar zu machen, muss in eurem Repo ein Ordner mit dem Namen <span class=\"lang:default highlight:0 decode:true crayon-inline \">.github<\/span>\u00a0 angelegt sein, in dem sich wiederum ein Ordner mit dem Namen <span class=\"lang:default highlight:0 decode:true crayon-inline \">workflows<\/span>\u00a0 befinden muss. Genau in diesem Ordner k\u00f6nnt ihr nun eure Workflows anlegen.<\/p>\n<p>Alle Workflows werden in YAML-Dateien gespeichert. Erstellen wir also eine <span class=\"lang:default highlight:0 decode:true crayon-inline \">integration.yml<\/span>\u00a0-Datei, um loszulegen.<\/p>\n<p>Ein guter Startpunkt f\u00fcr das Arbeiten mit GitHub Actions ist es, eine simple CI-Pipeline zu implementieren. Unsere App k\u00f6nnte in diesem Fall eine Node.js-Anwendung sein, die eine HTML-Seite hostet, etwas Javascript beinhaltet und mit Webpack gebaut wird.<\/p>\n<p>Zus\u00e4tzlich testen wir mit dem Test-Framework Jest, ob unser Code richtig funktioniert. Der Workflow soll ausgef\u00fchrt werden, wenn jemand einen Pull Request auf den Main Branch anst\u00f6\u00dft.<\/p>\n<p>Bisher muss jeder Developer, bevor er einen Pull Request f\u00fcr seinen Branch erstellt, selbstst\u00e4ndig auf seinem Rechner die Node Modules installieren, die Tests ausf\u00fchren und das Build Script ausf\u00fchren.<\/p>\n<p>Diese immer wiederkehrenden Schritte werden nun automatisiert und dienen als Anreiz, kleinere Teile an Code iterativ zu pushen.<\/p>\n<pre class=\"lang:default decode:true\">name: Node continuous integration\r\n\r\non:\r\n  pull_request:\r\n    branches: [ master ]\r\n\r\njobs:\r\n  test_pull_request:\r\n    runs-on: ubuntu-latest\r\n    steps:\r\n      - uses: actions\/checkout@v2\r\n      - uses: actions\/setup-node@v1\r\n        with:\r\n          node-version: 16\r\n      - run: npm ci\r\n      - run: npm test\r\n      - run: npm run build\r\n<\/pre>\n<p>Wir geben unserem Workflow den Namen <span class=\"lang:default highlight:0 decode:true crayon-inline \">Node continuous integration<\/span>\u00a0. Im Anschluss legen wir fest, f\u00fcr welche Events dieser Workflow ausgef\u00fchrt wird. Jeder Workflow hat mindestens einen Job. Alle Jobs werden unter dem <span class=\"lang:default highlight:0 decode:true crayon-inline \">jobs<\/span>\u00a0-Objekt geb\u00fcndelt.<\/p>\n<p>Wir nennen ihn <span class=\"lang:default highlight:0 decode:true crayon-inline\">test_pull_request<\/span> . Der Befehl <span class=\"lang:default highlight:0 decode:true crayon-inline \">runs-on<\/span>\u00a0 bestimmt das Betriebssystem der VM. Im Anschluss werden alle Schritte (steps) durchlaufen, die der Developer sonst manuell ausf\u00fchrt.<\/p>\n<p><strong>Hinweis:<\/strong><br \/>\nJeder Job l\u00e4uft auf einer eigenen VM-Instanz. Man greift also bei verschiedenen Jobs nicht auf einen Shared-Folder zu. Steps werden pro Job sequentiell bearbeitet, wohingegen Jobs voreingestellt parallel laufen.<\/p>\n<p>&nbsp;<\/p>\n<p>Vielleicht fragt ihr euch bereits, was z. B. hinter dem Befehl <span class=\"lang:default highlight:0 decode:true crayon-inline\">&#8211; uses: actions\/checkout@v2<\/span>\u00a0 steckt und wieso genau diese Syntax ben\u00f6tigt wird. Das erkl\u00e4re ich euch im Abschnitt Marketplace.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Der-Marketplace\"><\/span>Der Marketplace<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Grunds\u00e4tzlich ist es m\u00f6glich \u2013 wie auch in sp\u00e4teren Steps gezeigt \u2013 command-line Befehle direkt auszuf\u00fchren. Da das Aufsetzen von Node-Umgebungen oder das Importieren von Quellcode h\u00e4ufig vorkommt, gibt es bereits vorkonfigurierte Bl\u00f6cke.<br \/>\nDiese fassen alle f\u00fcr den Zweck erforderlichen Aufgaben zusammen. Es lohnt sich also immer, zuerst in den extra daf\u00fcr vorgesehenen <a href=\"https:\/\/github.com\/marketplace?type=actions\" target=\"_blank\" rel=\"noopener\">Marketplace<\/a> zu schauen. Eventuell findet man bereits eine action und erspart sich so einen Nachmittag voller Fragezeichen und Kopfzerbrechen.<\/p>\n<p>Hier gibt es nicht nur offizielle von GitHub erstellte, sondern auch von der Community f\u00fcr jeden verwendbare actions \u2026<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-33959 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Marketplace-1024x406.png\" alt=\"Screenshot GitHub Marketplace\" width=\"640\" height=\"254\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Marketplace-1024x406.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Marketplace-300x119.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Marketplace-768x304.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Marketplace-400x159.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Marketplace-360x143.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Marketplace.png 1037w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Bevor wir aber den Faden verlieren, schnell zur\u00fcck zu unserem Workflow.<br \/>\nHinter der <span class=\"lang:default highlight:0 decode:true crayon-inline\">action\/checkout@v2<\/span>\u00a0 versteckt sich eine von GitHub erstellte M\u00f6glichkeit, sein aktuelles Repo (mit aktuellem Commit) komplett auf die derzeitige VM zu kopieren. \u201e@v2\u201c steht hierbei f\u00fcr die Version.<br \/>\nDer n\u00e4chste step setzt uns eine Node-Umgebung der Version 16 auf. Im Anschluss werden die Dependencies installiert, der Code getestet und das Build-Script ausgef\u00fchrt.<\/p>\n<p>Aber wo finde ich meine Actions, Workflows und Ergebnisse? In der Hauptleiste deines Repos!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-33961 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-1024x254.png\" alt=\"Screenshot Actions in GitHub\" width=\"640\" height=\"159\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-1024x254.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-300x74.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-768x191.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-1536x381.png 1536w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-1920x477.png 1920w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-400x99.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu-360x89.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Menu.png 2022w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Nachdem ihr auf den Actions-Tab geklickt habt, \u00f6ffnet sich eine \u00dcbersicht aller Workflows. Auf der linken Seite sind alle im Repo vorhandenen Workflows aufgelistet. Mittig sind derzeit oder bereits gelaufene Workflows zu finden (Workflow-Log).<\/p>\n<p>Waren keine Fehler vorhanden, seht ihr einen gr\u00fcnen Haken, andersherum ein rotes X.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-33963 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-1024x413.png\" alt=\"Screenshot Workflow-Darstellung in GitHub Actions\" width=\"640\" height=\"258\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-1024x413.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-300x121.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-768x310.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-1536x620.png 1536w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-2048x826.png 2048w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-1920x775.png 1920w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-400x161.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Workflow-360x145.png 360w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Das h\u00f6rt sich alles abstrakt an und man wei\u00df doch gar nicht, woran es genau lag, sollte ein Fehler auftreten?!<\/p>\n<p>Kein Problem, klickt einfach auf einen Workflow aus dem Workflow-Log und ihr bekommt eine \u00dcbersicht des Ablaufes. Es wird genau aufgelistet, welche Schritte die VM durchgef\u00fchrt hat und ihr seht, an welchen Schritten es Probleme gab.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-33965 size-full\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Fehlschlag.png\" alt=\"Screenshot Workflow Log\" width=\"1455\" height=\"354\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Fehlschlag.png 1455w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Fehlschlag-300x73.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Fehlschlag-1024x249.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Fehlschlag-768x187.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Fehlschlag-400x97.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Fehlschlag-360x88.png 360w\" sizes=\"auto, (max-width: 1455px) 100vw, 1455px\" \/><\/p>\n<p>Im Anschluss behebt man die aufgetretenen Fehler, erstellt einen neuen Commit und der Workflow wird erneut gestartet. Hat jetzt alles funktioniert, seht ihr sowohl unter Workflows einen gr\u00fcnen Haken als auch in eurem Pull-Request.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-33967 size-large\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request-1024x792.png\" alt=\"Screenshot Branch in GitHub Actions\" width=\"640\" height=\"495\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request-1024x792.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request-300x232.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request-768x594.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request-1536x1187.png 1536w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request-400x309.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request-360x278.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/GitHub-Actions-Merge-Request.png 1850w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Dein-Start\"><\/span>Dein Start<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Du hast gerade kein Projekt, an dem du GitHub-Actions ausprobieren kannst?<br \/>\nKein Problem, erstelle einfach einen <a href=\"https:\/\/github.com\/inovex\/github-action-demo\" target=\"_blank\" rel=\"noopener\">Fork unseres Beispiel-Projektes<\/a> teste alles und erweitere es mit deinen eigenen Ideen!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Blog-Artikel m\u00f6chte ich euch vorstellen, wie man GitHub Actions einsetzt, damit ihr langweilige repetitive Aufgaben automatisieren und mehr Zeit mit dem Coden verbringen k\u00f6nnt.<\/p>\n","protected":false},"author":271,"featured_media":34082,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[722],"service":[420],"coauthors":[{"id":271,"display_name":"Benedict Homuth","user_nicename":"bhomuth"}],"class_list":["post-33941","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-git","service-apps"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Grundlagen von GitHub Actions \u2013 Hands-on Tutorial - inovex GmbH<\/title>\n<meta name=\"description\" content=\"Wie man GitHub Actions einsetzt, um langweilige repetitive Aufgaben zu automatisieren und mehr Zeit mit dem Coden verbringen zu k\u00f6nnen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"Wie man GitHub Actions einsetzt, um langweilige repetitive Aufgaben zu automatisieren und mehr Zeit mit dem Coden verbringen zu k\u00f6nnen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-19T10:08:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-22T09:14:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Benedict Homuth\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2-1024x576.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Benedict Homuth\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Benedict Homuth\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/\"},\"author\":{\"name\":\"Benedict Homuth\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/b80c15e67443e22d6d9dc32173d8880e\"},\"headline\":\"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial\",\"datePublished\":\"2022-01-19T10:08:12+00:00\",\"dateModified\":\"2022-11-22T09:14:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/\"},\"wordCount\":881,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Github_actions-2.png\",\"keywords\":[\"git\"],\"articleSection\":[\"Applications\",\"General\",\"Infrastructure\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/\",\"name\":\"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Github_actions-2.png\",\"datePublished\":\"2022-01-19T10:08:12+00:00\",\"dateModified\":\"2022-11-22T09:14:41+00:00\",\"description\":\"Wie man GitHub Actions einsetzt, um langweilige repetitive Aufgaben zu automatisieren und mehr Zeit mit dem Coden verbringen zu k\u00f6nnen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Github_actions-2.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/Github_actions-2.png\",\"width\":1920,\"height\":1080,\"caption\":\"Grafik: Frau bedient Button\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/grundlagen-von-github-actions-hands-on-tutorial\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\\\/\\\/www.inovex.de\\\/wp-content\\\/uploads\\\/2021\\\/03\\\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/inovexde\",\"https:\\\/\\\/x.com\\\/inovexgmbh\",\"https:\\\/\\\/www.instagram.com\\\/inovexlife\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/inovex\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/#\\\/schema\\\/person\\\/b80c15e67443e22d6d9dc32173d8880e\",\"name\":\"Benedict Homuth\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=gbf251782eb71de262930bfeda931bc58\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g\",\"caption\":\"Benedict Homuth\"},\"url\":\"https:\\\/\\\/www.inovex.de\\\/de\\\/blog\\\/author\\\/bhomuth\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial - inovex GmbH","description":"Wie man GitHub Actions einsetzt, um langweilige repetitive Aufgaben zu automatisieren und mehr Zeit mit dem Coden verbringen zu k\u00f6nnen.","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:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/","og_locale":"de_DE","og_type":"article","og_title":"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial - inovex GmbH","og_description":"Wie man GitHub Actions einsetzt, um langweilige repetitive Aufgaben zu automatisieren und mehr Zeit mit dem Coden verbringen zu k\u00f6nnen.","og_url":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2022-01-19T10:08:12+00:00","article_modified_time":"2022-11-22T09:14:41+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2.png","type":"image\/png"}],"author":"Benedict Homuth","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2-1024x576.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Benedict Homuth","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten","Written by":"Benedict Homuth"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/"},"author":{"name":"Benedict Homuth","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/b80c15e67443e22d6d9dc32173d8880e"},"headline":"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial","datePublished":"2022-01-19T10:08:12+00:00","dateModified":"2022-11-22T09:14:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/"},"wordCount":881,"commentCount":0,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2.png","keywords":["git"],"articleSection":["Applications","General","Infrastructure"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/","url":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/","name":"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2.png","datePublished":"2022-01-19T10:08:12+00:00","dateModified":"2022-11-22T09:14:41+00:00","description":"Wie man GitHub Actions einsetzt, um langweilige repetitive Aufgaben zu automatisieren und mehr Zeit mit dem Coden verbringen zu k\u00f6nnen.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/Github_actions-2.png","width":1920,"height":1080,"caption":"Grafik: Frau bedient Button"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/grundlagen-von-github-actions-hands-on-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Grundlagen von GitHub Actions \u2013 Hands-on Tutorial"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/b80c15e67443e22d6d9dc32173d8880e","name":"Benedict Homuth","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=gbf251782eb71de262930bfeda931bc58","url":"https:\/\/secure.gravatar.com\/avatar\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fc0ca1013df728ec8509f8f17381a75c84dc676c7a6cd0f2e534e36bf9c7a0a1?s=96&d=retro&r=g","caption":"Benedict Homuth"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/bhomuth\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/33941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/271"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=33941"}],"version-history":[{"count":5,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/33941\/revisions"}],"predecessor-version":[{"id":34574,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/33941\/revisions\/34574"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/34082"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=33941"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=33941"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=33941"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=33941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}