Artikel

Automatisiertes Deployment mit GitHub Actions – So funktioniert’s

GitLinux

In diesem Beitrag zeige ich, wie du den manuellen Deployment-Prozess deines Symfony-Projekts automatisieren kannst. Anstatt dich jedes Mal manuell per SSH einzuloggen und Befehle wie git pull, composer install --no-dev --optimize-autoloader und php bin/console cache:clear --env=prod auszuführen, übernimmt GitHub Actions diesen Prozess für dich.

Der manuelle Ablauf

Stell dir vor, du müsstest dich jedes Mal per SSH in deinen Produktionsserver einloggen und dort Folgendes tun:

  1. In das Projektverzeichnis wechseln: cd /home/www/mein-projekt
  2. Den Code aktualisieren: git pull
  3. Abhängigkeiten installieren: composer install --no-dev --optimize-autoloader
  4. Den Symfony-Cache leeren: php bin/console cache:clear --env=prod

Diese Befehle führst du aktuell manuell aus – nun soll dieser Ablauf automatisiert werden.

Deployment via GitHub Actions

Mit GitHub Actions kannst du einen Workflow erstellen, der diese Schritte automatisch per SSH auf deinem Produktionsserver ausführt. Hier ein Beispiel-Workflow:

name: Deploy to Production

on:
  push:
    branches: 
      - main
  workflow_dispatch:

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3
        with:
          path: mein-projekt  # Hier wird der Code in den Ordner "mein-projekt" geklont

      - name: Deploy via SSH
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.PRODUCTION_HOST }}
          username: ${{ secrets.PRODUCTION_USER }}
          password: ${{ secrets.PRODUCTION_PASSWORD }}
          port: 22
          script: |
            cd /home/www/mein-projekt
            git pull
            composer install --no-dev --optimize-autoloader
            php bin/console cache:clear --env=prod

Diesen Workflow am besten unter .github/workflows/deploy.yml speichern und zum Repository mit add und push hochladen. Dann schnappt sich github diesen Workflow von selbst und führt ihn sofort aus.

Was passiert in diesem Workflow?

  • Checkout:
    Mit der actions/checkout@v3-Action wird dein Repository in einen Ordner (hier mein-projekt) im Runner geladen.
  • Deployment via SSH:
    Die appleboy/ssh-action baut eine SSH-Verbindung zu deinem Produktionsserver auf. Im script-Block werden genau jene Befehle ausgeführt, die du auch manuell ausführen würdest:
    • Wechsel in das richtige Verzeichnis (cd /home/www/mein-projekt)
    • Aktualisierung des Codes (git pull)
    • Installation der Abhängigkeiten (composer install --no-dev --optimize-autoloader)
    • Leeren des Symfony-Caches (php bin/console cache:clear --env=prod)

Einsatz von Secrets in GitHub Actions

Sensible Informationen wie der Server-Hostname, der SSH-Benutzername und das Passwort sollten nicht im Code stehen. Stattdessen legst du diese in den Repository-Einstellungen unter Settings > Secrets and variables > Actions an. Zum Beispiel:

  • PRODUCTION_HOST – der Hostname oder die IP deines Produktionsservers
  • PRODUCTION_USER – dein SSH-Benutzername
  • PRODUCTION_PASSWORD – das Passwort zur SSH-Authentifizierung

Im Workflow werden diese Secrets über die Syntax ${{ secrets.DEIN_SECRET }} referenziert, sodass sie sicher bleiben.

Mit diesem automatisierten Deployment-Workflow musst du dich nicht mehr manuell in deinen Server einloggen und Befehle ausführen. Der Workflow übernimmt den kompletten Ablauf – von der Aktualisierung des Codes über die Installation der Abhängigkeiten bis hin zum Leeren des Caches. Das reduziert mögliche Fehlerquellen und spart Zeit.

Als Referenz und weiterführende Informationen empfehle ich die offizielle Dokumentation von GitHub Actions zum Deployment:
Deploying with GitHub Actions

0 Kommentare