PostgreSQL: 4. GitHub Actions

Diese Dokumentation ist Teil des GitHub Actions & GitLab CI-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Starten Sie einen echten PostgreSQL-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 PostgreSQL Cloud Service, der auf Zuverlässigkeit und Geschwindigkeit ausgelegt ist:

  • Unbegrenzte Verbindungen und Datenübertragungen für nahtlose Skalierung.
  • PgAdmin Web-Oberfläche inklusive für eine intuitive Datenbankverwaltung.
  • Beliebte Erweiterungen inklusive, wie PostGIS, TimescaleDB und PgVector.
  • Einfache Updates per Klick halten Ihre Datenbank sicher und aktuell.
  • Hohe Performance und starke Sicherheit auf privater, dedizierter Infrastruktur.

Sie können mit dem PostgreSQL Cloud Hosting von Stackhero in nur wenigen Minuten starten. Profitieren Sie von einer zuverlässigen Datenbanklösung und sparen Sie wertvolle Zeit beim Datenmanagement.

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

name: CI mit PostgreSQL

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    env:
      STACKHERO_TOKEN: ${{ secrets.STACKHERO_TOKEN }}
      STACK_NAME: ci-postgresql-${{ 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 postgresql-client

      - name: PostgreSQL-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="postgresql" \
            --instance="$INSTANCE" \
            --region="$REGION")
          echo "SERVICE_ID=$SERVICE_ID" >> "$GITHUB_ENV"
          stackhero service-wait-for --service="$SERVICE_ID"

      - name: Tests gegen PostgreSQL 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.password')
          # Run a trivial query against the database.
          PGPASSWORD="$password" psql "host=$host port=5432 user=admin dbname=admin sslmode=require" -c "SELECT 1;"
          echo "✅ PostgreSQL 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 PostgreSQL-Instanz immer gelöscht und Sie zahlen nicht für ungenutzte Ressourcen.