MySQL: 4. GitHub Actions

Diese Dokumentation ist Teil des GitHub Actions & GitLab CI-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Starten Sie einen echten MySQL-Service direkt aus Ihrer GitHub Actions- oder GitLab CI-Pipeline, führen Sie Ihre Tests dagegen aus und fahren Sie ihn anschließend automatisch wieder herunter.

👋 Willkommen in der Stackhero-Dokumentation!

Stackhero bietet einen vollständig verwalteten MySQL Cloud Service, der die Bereitstellung und Verwaltung für produktive Workloads vereinfacht:

  • Unbegrenzte Verbindungen und Datenübertragungen.
  • Integrierte phpMyAdmin Web-Oberfläche für eine einfache Datenbankverwaltung.
  • Updates ohne Aufwand dank One-Click-Upgrades.
  • Gleichbleibende Performance und hohe Sicherheit auf einer privaten, dedizierten Infrastruktur.

Mit Stackhero steht Ihnen eine zuverlässige MySQL-Datenbank in wenigen Minuten bereit. Verbringen Sie weniger Zeit mit Einrichtung und Wartung und konzentrieren Sie sich auf die Entwicklung Ihrer Anwendungen. Testen Sie noch heute das MySQL Cloud Hosting auf Stackhero.

Speichern Sie den folgenden Inhalt als .github/workflows/ci.yml. Ab sofort werden bei jedem Push und Pull Request Tests gegen eine echte MySQL-Instanz ausgeführt.

name: CI mit MySQL

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      STACKHERO_TOKEN: ${{ secrets.STACKHERO_TOKEN }}
      STACK_NAME: ci-mysql-${{ github.run_id }}-${{ github.run_attempt }}
      INSTANCE: "10G"   # Bei Bedarf anpassen (siehe Schritt 3)
      REGION: europe
    steps:
      - uses: actions/checkout@v4

      - name: Stackhero CLI und Client installieren
        run: |
          curl -fsSL https://www.stackhero.io/install.sh | sh
          apt-get update && apt-get install -y --no-install-recommends jq curl default-mysql-client

      - name: MySQL-Service erstellen
        run: |
          set -euo pipefail
          STACK_ID=$(stackhero --format=script stack-create --name="$STACK_NAME")
          echo "STACK_ID=$STACK_ID" >> "$GITHUB_ENV"
          SERVICE_ID=$(stackhero --format=script service-add \
            --stack="$STACK_ID" \
            --service-store="mysql" \
            --instance="$INSTANCE" \
            --region="$REGION")
          echo "SERVICE_ID=$SERVICE_ID" >> "$GITHUB_ENV"
          stackhero service-wait-for --service="$SERVICE_ID"

      - name: Tests gegen MySQL ausführen
        run: |
          set -euo pipefail
          config=$(stackhero service-configuration-get --service="$SERVICE_ID" --format=json)
          host=$(echo "$config" | jq -r '.configuration.domain')
password=$(echo "$config" | jq -r '.configuration.mysqlRootPassword')
          # Run a trivial query against the database.
          mysql --host="$host" --port=3306 --user=root --password="$password" --ssl-mode=REQUIRED -e "SELECT 1;"
          echo "✅ MySQL ist aus der CI erreichbar."
          # Sie können hier Ihre eigene Test-Suite mit den oben extrahierten Zugangsdaten ausführen ...

      - name: Aufräumen (immer, auch bei Fehlern)
        if: always()
        run: |
          if [ -n "${SERVICE_ID:-}" ]; then
            stackhero service-delete --service="$SERVICE_ID" --confirm
            stackhero service-wait-for --service="$SERVICE_ID"
          fi
          if [ -n "${STACK_ID:-}" ]; then
            stackhero stack-delete --stack="$STACK_ID" --confirm
          fi

Der Teardown-Schritt ist mit if: always() konfiguriert, sodass er unabhängig vom Pipeline-Ergebnis ausgeführt wird. So wird Ihre MySQL-Instanz immer gelöscht und Sie zahlen nicht für ungenutzte Ressourcen.