{"id":3067,"date":"2024-01-10T09:50:32","date_gmt":"2024-01-10T08:50:32","guid":{"rendered":"https:\/\/informatik.htwk-leipzig.de\/seminar\/?p=3067"},"modified":"2024-03-19T17:41:35","modified_gmt":"2024-03-19T16:41:35","slug":"jenkins","status":"publish","type":"post","link":"https:\/\/informatik.htwk-leipzig.de\/seminar\/lehrveranstaltungen\/betriebliche-informationssysteme\/2024\/jenkins\/","title":{"rendered":"Jenkins"},"content":{"rendered":"<h2>Was ist Jenkins?<\/h2>\n<p>Jenkins ist ein leistungsstarker Open-Source-Automatisierungsserver, der in der Welt der Softwareentwicklung weit verbreitet ist. Entwickelt, um die Prinzipien der Continuous Integration (CI) und Continuous Delivery (CD) zu f\u00f6rdern, fungiert Jenkins als Herzst\u00fcck f\u00fcr die Automatisierung von Entwicklungs- und Bereitstellungsprozessen. Diese Plattform bietet eine flexible und erweiterbare Umgebung, die es Entwicklungsteams erm\u00f6glicht, effizienter zu arbeiten und qualitativ hochwertige Softwareprodukte schneller auf den Markt zu bringen.<\/p>\n<h2>Warum Jenkins?<\/h2>\n<p>Die Motivation hinter der Verwendung von Jenkins liegt in der Bew\u00e4ltigung der Herausforderungen, die mit den heutigen komplexen Softwareentwicklungsprozessen einhergehen. Die steigende Komplexit\u00e4t von Projekten erfordert nicht nur eine beschleunigte Bereitstellung von Anwendungen, sondern auch eine kontinuierliche Integration von Code\u00e4nderungen und eine zuverl\u00e4ssige Bereitstellung auf Produktionsumgebungen. Jenkins bietet nicht nur eine L\u00f6sung f\u00fcr diese Herausforderungen, sondern f\u00f6rdert auch bew\u00e4hrte Praktiken wie die kontinuierliche Integration und Bereitstellung, um eine h\u00f6here Qualit\u00e4t der Software und eine schnellere Markteinf\u00fchrung zu erm\u00f6glichen. Die Motivation, Jenkins in den Entwicklungsprozess zu integrieren, liegt also in der Optimierung von Arbeitsabl\u00e4ufen, der Verbesserung der Kollaboration im Team und der Steigerung der Gesamteffizienz der Softwareentwicklung.<\/p>\n<h2>Was ist CI\/CD?<\/h2>\n<p>CI\/CD steht f\u00fcr Continuous Integration (CI) und Continuous Delivery (CD). Diese Praktiken sind entscheidend f\u00fcr die moderne Softwareentwicklung und erm\u00f6glichen es Entwicklungsteams, Software schneller, effizienter und zuverl\u00e4ssiger bereitzustellen.<\/p>\n<p><strong>Continuous Integration:<\/strong><\/p>\n<ul>\n<li>Ziel: Integration von Code\u00e4nderungen in das Haupt-Repository in regelm\u00e4\u00dfigen Abst\u00e4nden.<\/li>\n<li>Prozess: Entwickelnde checken ihren Code in das Versionskontrollsystem ein. Ein CI-Server (wie Jenkins) \u00fcberwacht das Repository und l\u00f6st automatisch Builds und Tests aus, um sicherzustellen, dass die neuen \u00c4nderungen nahtlos mit dem vorhandenen Code integriert werden k\u00f6nnen.<\/li>\n<li>Vorteile: Fr\u00fche Erkennung von Integrationsproblemen, Reduzierung von Konflikten und Fehlern, schnellere Feedbackschleifen f\u00fcr Entwickelnde.<\/li>\n<\/ul>\n<p><strong>Continuous Delivery:<\/strong><\/p>\n<ul>\n<li>Ziel: Automatisierung des Bereitstellungsprozesses bis zur Produktionsumgebung.<\/li>\n<li>Prozess: Nach erfolgreicher CI werden die \u00c4nderungen automatisch durch verschiedene Umgebungen (z. B. Entwicklungs-, Test-, Staging-Umgebungen) bereitgestellt und schlie\u00dflich in die Produktionsumgebung verschoben, wenn alle Tests erfolgreich verlaufen.<\/li>\n<li>Vorteile: Schnellere und zuverl\u00e4ssigere Bereitstellung von Software, geringeres Risiko menschlicher Fehler.<\/li>\n<\/ul>\n<h2>Features<\/h2>\n<ol>\n<li><strong>CI:<\/strong> Jenkins erm\u00f6glicht die kontinuierliche Integration von Code\u00e4nderungen durch automatische Builds und Tests. Entwickelnde k\u00f6nnen ihre \u00c4nderungen in ein Versionskontrollsystem wie Git einchecken, und Jenkins wird automatisch einen Buildprozess ausl\u00f6sen, um den Code zu kompilieren und Tests auszuf\u00fchren.<\/li>\n<li><strong>CD:<\/strong> Jenkins unterst\u00fctzt auch kontinuierliche Bereitstellung, bei der Software automatisch auf Produktionsumgebungen bereitgestellt wird, wenn bestimmte Tests erfolgreich durchgef\u00fchrt wurden. Dies beschleunigt den Bereitstellungsprozess und verbessert die Zuverl\u00e4ssigkeit der Software.<\/li>\n<li><strong>Plugins:<\/strong> Jenkins bietet eine Vielzahl von Plugins, die die Integration mit verschiedenen Tools und Technologien erm\u00f6glichen. Diese Plugins k\u00f6nnen f\u00fcr verschiedene Zwecke verwendet werden, z. B. zur Integration mit Versionskontrollsystemen, Build-Tools, Testframeworks und mehr.<\/li>\n<li><strong>Build-Pipelines:<\/strong> Jenkins erm\u00f6glicht die Erstellung von komplexen Build- und Bereitstellungspipelines. Entwickelnde k\u00f6nnen mehrstufige Pipelines erstellen, die verschiedene Aufgaben wie Build, Test, statische Code-Analyse und Bereitstellung in einer automatisierten Weise durchf\u00fchren.<\/li>\n<li><strong>Skriptunterst\u00fctzung:<\/strong> Jenkins unterst\u00fctzt verschiedene Skriptsprachen wie Groovy und bietet die M\u00f6glichkeit, benutzerdefinierte Skripte f\u00fcr Build- und Bereitstellungsprozesse zu verwenden.<\/li>\n<li><strong>\u00dcberwachung und Benachrichtigungen:<\/strong> Jenkins bietet Funktionen zur \u00dcberwachung von Builds und Pipelines sowie zur Benachrichtigung bei Fehlern oder erfolgreichen Abschl\u00fcssen von Prozessen.<\/li>\n<li><strong>Community und Erweiterbarkeit:<\/strong> Da Jenkins Open Source ist, hat es eine aktive Community, die zur Weiterentwicklung und Unterst\u00fctzung beitr\u00e4gt. Die Plattform ist erweiterbar und erm\u00f6glicht es Entwickelnden, eigene Plugins zu erstellen, um spezifische Anforderungen zu erf\u00fcllen.<\/li>\n<\/ol>\n<h2>Integration mit anderer Software<\/h2>\n<p>Es gibt \u00fcber 1800 Plugin zur Integration mit andere Software. Daher werden hier nur ein kleiner Auszug davon vorgestellt. Falls eine Integration noch nicht m\u00f6glich sein sollte gibt es immer noch die Option diese selbst umzusetzen und ein eigenes <a href=\"https:\/\/www.jenkins.io\/doc\/developer\/tutorial\/create\/\">Plugin<\/a> zu erstellen.<\/p>\n<ol>\n<li><a href=\"https:\/\/www.jenkins.io\/solutions\/github\/\">Github:<\/a> Es ist m\u00f6glich auf \u00c4nderungen in einem Github Reposetory einzugehen und daraufhin ein neues Build zu erzeugen. Dabei ist die Kommunikation in beide Richtungen m\u00f6glich und Github kann auch Informationen von Jenkins erhalten. Zus\u00e4tzlich kann Github als Authentifikation genutzt werden. Dies erm\u00f6glicht einen leichten und sichereren Zugang, da viele beteiligten schon einen Github Account besitzen.<\/li>\n<li><a href=\"https:\/\/www.qatouch.com\/blog\/integrating-jenkins-with-selenium\/\">Selenium<\/a>: Durch das Selenium und WebDriver Automation Plugin k\u00f6nnen auch Tests in Selenium automatisiert werden. Die Tests werden dann automatisch angesto\u00dfen und ausgef\u00fchrt.<\/li>\n<li><a href=\"https:\/\/support.atlassian.com\/jira-cloud-administration\/docs\/integrate-with-jenkins\/\">Jira:<\/a> Durch die Einbindung von Jenkins in Jira ist ein besserer \u00dcberblick f\u00fcr alle Issues m\u00f6glich. Die Bereitgestellter Version der Software wird dadurch automatisch aufgef\u00fchrt. Wodurch ein \u00dcberblick \u00fcber die Ver\u00f6ffentlichungs Historie jedes Tickets m\u00f6glich ist.<\/li>\n<li><a href=\"https:\/\/docs.sonarsource.com\/sonarqube\/9.8\/analyzing-source-code\/ci-integration\/jenkins-integration\/\">SonarQube:<\/a> Die Integration von Jenkins \u00fcbernimmt denn &#8222;Build and Test&#8220; Teil von SonarQube damit der Code auf Lauff\u00e4higkeit gepr\u00fcft wird und danach eventuell gemerged wird.<\/li>\n<li><a href=\"https:\/\/dzone.com\/articles\/configure-jenkins-notifications-with-microsoft-tea\">Microsoft Teams<\/a>: Es ist m\u00f6glich Benachrichtigung von Jobs in Jenkins in einem Channel in Teams zu erhalten. Damit erscheint eine Nachricht wenn sich etwas \u00e4ndert.<\/li>\n<li><a href=\"https:\/\/www.jenkins.io\/doc\/book\/installing\/kubernetes\/\">Kubernetes:<\/a> Durch die Integration mit Kubernetes wird die Benutzung von Jenkins noch verbessert. Die Ressourcen k\u00f6nnen durch Kubernetes\u00a0 genau zugeteilt werden. Wenn schon ein Kubernetes Cluster benutzt wird ist es besonders sinnvoll darin ebenfalls Jenkins zu integrieren.<\/li>\n<\/ol>\n<h2>BPMN<\/h2>\n<h2><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3334\" src=\"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-content\/uploads\/2024\/01\/Unbenanntes-Diagramm.drawio.png\" alt=\"\" width=\"981\" height=\"841\" \/><\/h2>\n<h2>Alternativen<\/h2>\n<ol>\n<li><strong>GitLab CI\/CD:<\/strong>\n<ul>\n<li>Ein Bestandteil der GitLab-Plattform, bietet integrierte CI\/CD-Funktionen.<\/li>\n<li>Integriert nahtlos mit GitLab-Repositories und unterst\u00fctzt die Definition von CI\/CD-Pipelines in der GitLab CI\/CD-Konfigurationsdatei (<code>.gitlab-ci.yml<\/code>).<\/li>\n<li>Bietet Funktionen f\u00fcr automatische Builds, Tests und Bereitstellung.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Azure Pipelines:\u00a0<\/strong>\n<ul>\n<li>Ein Teil von Microsoft Azure DevOps, bietet Azure Pipelines umfassende CI\/CD-Funktionen.<\/li>\n<li>Unterst\u00fctzt die Automatisierung von Build-, Test- und Bereitstellungsprozessen f\u00fcr verschiedene Plattformen und Anwendungstypen.<\/li>\n<li>Integriert sich nahtlos mit Azure-Cloud-Diensten und kann auch f\u00fcr Projekte au\u00dferhalb von Azure verwendet werden.<\/li>\n<\/ul>\n<\/li>\n<li><strong>GitHub Actions:<\/strong>\n<ul>\n<li>Ein integrierter CI\/CD-Service, der direkt in GitHub eingebettet ist.<\/li>\n<li>Erm\u00f6glicht die Definition von Workflow-Pipelines direkt im GitHub-Repository.<\/li>\n<li>Unterst\u00fctzt eine Vielzahl von Programmiersprachen und Umgebungen.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h2>Zusammenfassung und Bewertung<\/h2>\n<p>Jenkins, als f\u00fchrender Open-Source-Automatisierungsserver, spielt eine zentrale Rolle in der Softwareentwicklung. Die Plattform erm\u00f6glicht die effiziente Umsetzung von Continuous Integration (CI) und Continuous Delivery (CD) und adressiert damit die Herausforderungen moderner Entwicklungsprojekte. Die Motivation hinter der Nutzung von Jenkins liegt in der Bew\u00e4ltigung steigender Anforderungen und Komplexit\u00e4ten. Die Plattform f\u00f6rdert bew\u00e4hrte Praktiken, verbessert die Zusammenarbeit im Team und erm\u00f6glicht eine fr\u00fchzeitige Fehlererkennung durch kontinuierliche Integration und automatisierte Bereitstellung. Jenkins bietet eine umfassende Suite von Funktionen, darunter Build-Pipelines, Skriptunterst\u00fctzung, \u00dcberwachung und Benachrichtigungen. Die Integration mit \u00fcber 1800 Plugins erm\u00f6glicht eine nahtlose Zusammenarbeit mit verschiedenen Tools, wie GitHub, Selenium, Jira, SonarQube, Microsoft Teams und Kubernetes. Trotz der St\u00e4rken von Jenkins gibt es auch leistungsf\u00e4hige Alternativen wie GitLab CI\/CD, Azure Pipelines und GitHub Actions. Die Wahl zwischen diesen h\u00e4ngt von den spezifischen Anforderungen und Pr\u00e4ferenzen eines Entwicklerteams ab.<\/p>\n<p>Insgesamt ist Jenkins aufgrund seiner Vielseitigkeit, Erweiterbarkeit und aktiven Community eine herausragende Wahl f\u00fcr die Automatisierung von Entwicklungsprozessen. Es optimiert Workflows, f\u00f6rdert die Zusammenarbeit und steigert die Qualit\u00e4t der bereitgestellten Software.<\/p>\n<h2>Quellen<\/h2>\n<p><a href=\"https:\/\/github.com\/features\/actions\">https:\/\/github.com\/features\/actions<\/a><\/p>\n<p><a href=\"https:\/\/azure.microsoft.com\/de-de\/products\/devops\/pipelines\/\">https:\/\/azure.microsoft.com\/de-de\/products\/devops\/pipelines\/<\/a><\/p>\n<p><a href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\">https:\/\/docs.gitlab.com\/ee\/ci\/<\/a><\/p>\n<p><a href=\"https:\/\/www.jenkins.io\/doc\/\">https:\/\/www.jenkins.io\/doc\/<\/a><\/p>\n<p><a href=\"https:\/\/www.jetbrains.com\/de-de\/teamcity\/ci-cd-guide\/continuous-integration\/\">https:\/\/www.jetbrains.com\/de-de\/teamcity\/ci-cd-guide\/continuous-integration\/<\/a><\/p>\n<p><a href=\"https:\/\/www.jetbrains.com\/de-de\/teamcity\/ci-cd-guide\/continuous-delivery\/\">https:\/\/www.jetbrains.com\/de-de\/teamcity\/ci-cd-guide\/continuous-delivery\/<\/a><\/p>\n<p><a href=\"https:\/\/www.jenkins.io\/solutions\/github\/\">https:\/\/www.jenkins.io\/solutions\/github\/<\/a><\/p>\n<p><a href=\"https:\/\/www.qatouch.com\/blog\/integrating-jenkins-with-selenium\/\">https:\/\/www.qatouch.com\/blog\/integrating-jenkins-with-selenium\/<\/a><\/p>\n<p><a href=\"https:\/\/support.atlassian.com\/jira-cloud-administration\/docs\/integrate-with-jenkins\/\">https:\/\/support.atlassian.com\/jira-cloud-administration\/docs\/integrate-with-jenkins\/<\/a><\/p>\n<p><a href=\"https:\/\/dzone.com\/articles\/configure-jenkins-notifications-with-microsoft-tea\">https:\/\/dzone.com\/articles\/configure-jenkins-notifications-with-microsoft-tea<\/a><\/p>\n<p><a href=\"https:\/\/www.jenkins.io\/doc\/book\/installing\/kubernetes\/\">https:\/\/www.jenkins.io\/doc\/book\/installing\/kubernetes\/<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Was ist Jenkins? Jenkins ist ein leistungsstarker Open-Source-Automatisierungsserver, der in der Welt der Softwareentwicklung weit verbreitet ist. Entwickelt, um die<\/p>\n","protected":false},"author":147,"featured_media":3280,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[81,84],"class_list":["post-3067","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-betriebliche-informationssysteme","tag-continous-integration","tag-continuous-deployment"],"_links":{"self":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/3067","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/users\/147"}],"replies":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/comments?post=3067"}],"version-history":[{"count":14,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/3067\/revisions"}],"predecessor-version":[{"id":3335,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/posts\/3067\/revisions\/3335"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media\/3280"}],"wp:attachment":[{"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/media?parent=3067"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/categories?post=3067"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/informatik.htwk-leipzig.de\/seminar\/wp-json\/wp\/v2\/tags?post=3067"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}