bg_image
header

GitHub Actions

GitHub Actions ist ein Feature von GitHub, mit dem du automatisierte Workflows für deine Softwareprojekte erstellen kannst – direkt im GitHub-Repository.


🛠️ Was kann man mit GitHub Actions machen?

Du kannst CI/CD-Pipelines (Continuous Integration / Continuous Deployment) aufbauen, z. B.:

  • Code automatisch testen (z. B. mit PHPUnit, Jest, Pytest)

  • 🛠️ Code bei jedem Push oder Pull Request builden

  • 🚀 Software automatisch deployen (z. B. auf einen Webserver, in die Cloud, zu DockerHub)

  • 📦 Releases erstellen (z. B. ZIP-Dateien, Versionstags)

  • 🔄 Cronjobs oder geplante Tasks laufen lassen


🧱 Wie funktioniert es?

GitHub Actions basiert auf sogenannten Workflows, die du in einer Datei definierst:

  • Die Datei heißt z. B. .github/workflows/ci.yml

  • Sie ist im YAML-Format

  • Du definierst Events (z. B. push, pull_request) und Jobs (z. B. build, test)

  • Jobs bestehen aus Steps, die Befehle oder Aktionen ausführen

Beispiel: Einfacher CI-Workflow für Node.js

name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '20'
      - run: npm install
      - run: npm test

🧩 Was sind "Actions"?

Eine Action ist ein einzelner Schritt, den man in einem Workflow ausführt. Es gibt:

  • Vorgefertigte Actions (z. B. actions/checkout, setup-node, upload-artifact)

  • Eigene Actions (z. B. Shell-Skripte oder Docker-Container)

Du kannst Actions im GitHub Marketplace finden und nutzen.


💡 Warum ist das nützlich?

  • Spart manuelle Arbeit

  • Verbessert Codequalität (durch automatisierte Tests)

  • Macht Deployments reproduzierbar

  • Alles direkt in GitHub – kein externer CI-Dienst nötig (wie Jenkins oder Travis CI)


SonarQube

SonarQube ist ein Open-Source-Tool zur kontinuierlichen Analyse und Qualitätssicherung von Quellcode. Es hilft Entwicklern und Teams, die Codequalität zu bewerten, Schwachstellen zu identifizieren und Best Practices in der Softwareentwicklung zu fördern.

Hauptfunktionen:

  1. Codequalität prüfen:

    • SonarQube analysiert Quellcode und bewertet Aspekte wie Lesbarkeit, Wartbarkeit und Architekturqualität.
    • Es erkennt potenzielle Probleme wie Code-Duplikate, nicht genutzte Variablen oder komplexe Methoden.
  2. Sicherheitslücken aufdecken:

  3. Technische Schulden bewerten:

    • Technische Schulden sind die Aufwände, die nötig wären, um den Code auf einen optimalen Zustand zu bringen.
    • SonarQube visualisiert diese Schulden, um Priorisierungen zu erleichtern.
  4. Unterstützung für viele Programmiersprachen:

    • Es unterstützt mehr als 20 Sprachen, darunter Java, Python, JavaScript, C#, C++, PHP und viele mehr.
  5. Integration in CI/CD-Pipelines:

    • SonarQube lässt sich leicht in Tools wie Jenkins, GitLab CI/CD oder Azure DevOps integrieren.
    • Dadurch kann Code bei jedem Commit oder vor einem Release geprüft werden.
  6. Berichte und Dashboards:

    • Es bietet übersichtliche Dashboards mit Metriken, Trends und Detailanalysen.
    • Entwickler können leicht erkennen, wo Verbesserungen nötig sind.

Einsatzbereiche:

  • Unternehmen: Zur Sicherstellung der Codequalität und Einhaltung von Sicherheitsstandards in großen Softwareprojekten.
  • Teams: Für eine kontinuierliche Verbesserung des Codes und zur Förderung guter Entwicklungspraktiken.
  • Einzelentwickler: Als Lernwerkzeug, um besseren Code zu schreiben.

SonarQube ist in einer kostenlosen Community-Edition und in kommerziellen Versionen mit erweiterten Funktionen verfügbar (z. B. für größere Teams oder spezielle Sicherheitsanalysen).

 


Continuous Deployment - CD

Continuous Deployment (CD) ist ein Ansatz in der Softwareentwicklung, bei dem Codeänderungen automatisch in die Produktionsumgebung übertragen werden, nachdem sie den automatisierten Testprozess bestanden haben. Dies bedeutet, dass neue Funktionen, Fehlerbehebungen und andere Änderungen sofort nach erfolgreicher Durchführung von Tests live gehen können. Hier sind die Hauptmerkmale und Vorteile von Continuous Deployment:

  1. Automatisierung: Der gesamte Prozess von der Codeänderung bis zur Produktion ist automatisiert. Dazu gehören das Bauen der Software, das Testen und das Deployment.

  2. Schnelle Bereitstellung: Änderungen werden sofort nach erfolgreichem Testen bereitgestellt, was die Zeit zwischen der Entwicklung und der Nutzung durch die Endbenutzer erheblich verkürzt.

  3. Hohe Qualität und Zuverlässigkeit: Durch den Einsatz umfangreicher automatisierter Tests und Überwachungen wird sichergestellt, dass nur qualitativ hochwertiger und stabiler Code in die Produktion gelangt.

  4. Geringere Risiken: Da Änderungen häufig und in kleinen Inkrementen bereitgestellt werden, sind die Risiken im Vergleich zu großen, seltenen Releases geringer. Fehler können schneller erkannt und behoben werden.

  5. Kundenzufriedenheit: Kunden profitieren schneller von neuen Funktionen und Verbesserungen, was die Zufriedenheit erhöht.

  6. Kontinuierliches Feedback: Entwickler erhalten schneller Feedback zu ihren Änderungen, was die Möglichkeit bietet, Probleme schneller zu identifizieren und zu beheben.

Ein typischer Continuous Deployment-Prozess könnte folgende Schritte umfassen:

  1. Codeänderung: Ein Entwickler macht eine Änderung im Code und pusht diese in ein Versionskontrollsystem (z.B. Git).

  2. Automatisiertes Bauen: Ein Continuous Integration (CI) Server (z.B. Jenkins, CircleCI) zieht den neuesten Code, baut die Anwendung und führt unit tests und integration tests durch.

  3. Automatisiertes Testen: Der Code durchläuft eine Reihe automatisierter Tests, einschließlich Unit-Tests, Integrationstests und möglicherweise End-to-End-Tests.

  4. Bereitstellung: Wenn alle Tests erfolgreich sind, wird der Code automatisch in die Produktionsumgebung übertragen.

  5. Überwachung und Feedback: Nach der Bereitstellung wird die Anwendung überwacht, um sicherzustellen, dass sie korrekt funktioniert. Feedback aus der Produktionsumgebung kann zur weiteren Verbesserung verwendet werden.

Continuous Deployment unterscheidet sich von Continuous Delivery (auch CD genannt), wo der Code ebenfalls regelmäßig und automatisch gebaut und getestet wird, aber eine manuelle Freigabe erforderlich ist, um ihn in die Produktion zu bringen. Continuous Deployment geht einen Schritt weiter und automatisiert auch diesen letzten Schritt.

 


Jenkins

jenkins

Jenkins ist ein Open-Source-Automatisierungsserver, der häufig für das Erstellen, Testen und Bereitstellen von Softwareprojekten verwendet wird. Er bietet eine Plattform zur Automatisierung verschiedener Aufgaben im Zusammenhang mit dem Softwareentwicklungslebenszyklus, einschließlich des Kompilierens von Code, des Durchführens von Tests und der Bereitstellung von Anwendungen. Jenkins wird weitgehend in kontinuierlichen Integrations- und Bereitstellungspipelines (CI/CD) eingesetzt, um den Entwicklungsprozess zu optimieren und qualitativ hochwertige Softwareversionen sicherzustellen.

Wichtige Funktionen und Konzepte von Jenkins sind:

  1. Automatisierungsserver: Jenkins fungiert als Automatisierungsserver und orchestriert verschiedene Aufgaben und Prozesse in einem Softwareprojekt. Er kann so konfiguriert werden, dass bestimmte Aktionen aufgrund von Ereignissen, Zeitplänen oder Änderungen im Code ausgelöst werden.

  2. Plugins und Erweiterbarkeit: Jenkins bietet eine Vielzahl von Plugins, die seine Funktionalität erweitern. Mit Plugins können Jenkins und verschiedene Versionsverwaltungssysteme, Build-Tools, Testframeworks, Bereitstellungsplattformen und mehr integriert werden.

  3. Kontinuierliche Integration (CI): Jenkins unterstützt kontinuierliche Integration, indem er automatisch Codeänderungen erstellt und testet, sobald sie im Versionskontrollsystem eingereicht werden. Dies hilft dabei, Integrationsprobleme frühzeitig zu erkennen und sicherzustellen, dass der Code stabil bleibt.

  4. Kontinuierliche Lieferungund Bereitstellung (CD): Jenkins unterstützt kontinuierliche Lieferung und Bereitstellung, indem er den Prozess des Verpackens, Testens und Bereitstellens von Anwendungen in verschiedenen Umgebungen wie Entwicklung, Staging und Produktion automatisiert.

  5. Pipeline als Code: Jenkins-Pipelines ermöglichen es, den gesamten Softwarebereitstellungsprozess als Code zu definieren. Dies bedeutet, dass die Schritte zum Erstellen, Testen und Bereitstellen von Anwendungen in einem versionskontrollierten Skript festgelegt werden, was den Prozess reproduzierbarer und wartbarer macht.

  6. Integration mit Tools: Jenkins kann nahtlos mit einer Vielzahl von Tools integriert werden, darunter Versionsverwaltungssysteme (z. B. Git, SVN), Build-Tools (z. B. Maven, Gradle), Testframeworks, Containerorchestrierungsplattformen (z. B. Docker, Kubernetes) und Benachrichtigungssysteme (z. B. Slack, E-Mail).

  7. Überwachung und Berichterstellung: Jenkins bietet Überwachungs- und Berichterstellungsfunktionen, mit denen der Fortschritt von Builds und Bereitstellungen verfolgt, Protokolle angezeigt und Benachrichtigungen über Erfolge oder Fehler empfangen werden können.

  8. Skalierbarkeit: Jenkins kann so konfiguriert werden, dass Build- und Test-Workloads auf mehrere Knoten verteilt werden, was dazu beitragen kann, die Ressourcennutzung zu verwalten und den Entwicklungsprozess zu beschleunigen.

Jenkins wird aufgrund seiner Flexibilität, Erweiterbarkeit und großen Community von Mitwirkenden weit verbreitet eingesetzt. Er unterstützt eine Vielzahl von Programmiersprachen und Technologiestacks, was ihn zu einem vielseitigen Tool zur Automatisierung von Softwareentwicklungsaufgaben macht.