TimescaleDB: 4. GitHub Actions
Diese Dokumentation ist Teil des GitHub Actions & GitLab CI-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Starten Sie einen echten TimescaleDB-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 eine einsatzbereite TimescaleDB Cloud Lösung, mit der Sie in wenigen Minuten starten können. Das erwartet Sie:
- Alle wichtigen Plugins inklusive, wie
PostGIS,PgVectorund viele mehr.- Bequemer Zugriff auf die PgAdmin Web-Oberfläche für eine einfache Verwaltung Ihrer Datenbank.
- Einfache Updates per Klick, damit Ihre Umgebung immer aktuell bleibt.
- Zuverlässige Performance und hohe Sicherheit auf Ihrer eigenen privaten, dedizierten Infrastruktur.
Wenn Sie Zeit sparen und Ihre Abläufe optimieren möchten, ist das TimescaleDB Cloud Hosting von Stackhero darauf ausgelegt, Ihnen ein möglichst reibungsloses Erlebnis zu bieten. Sie können es in nur 5 Minuten ausprobieren!
Speichern Sie den folgenden Inhalt als .github/workflows/ci.yml. Ab sofort werden bei jedem Push und Pull Request Tests gegen eine echte TimescaleDB-Instanz ausgeführt.
name: CI mit TimescaleDB
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
env:
STACKHERO_TOKEN: ${{ secrets.STACKHERO_TOKEN }}
STACK_NAME: ci-timescaledb-${{ 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: TimescaleDB-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="timescaledb" \
--instance="$INSTANCE" \
--region="$REGION")
echo "SERVICE_ID=$SERVICE_ID" >> "$GITHUB_ENV"
stackhero service-wait-for --service="$SERVICE_ID"
- name: Tests gegen TimescaleDB 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 "✅ TimescaleDB 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 TimescaleDB-Instanz immer gelöscht und Sie zahlen nicht für ungenutzte Ressourcen.