TimescaleDB: 5. GitLab CI
Cette documentation fait partie du guide GitHub Actions & GitLab CI. Consultez le guide complet ici : Lancez un vrai service TimescaleDB à partir de votre pipeline GitHub Actions ou GitLab CI, exécutez vos tests dessus, puis supprimez-le automatiquement.
Bienvenue dans la documentation Stackhero !
Stackhero offre une solution TimescaleDB cloud clé en main, conçue pour vous permettre de démarrer en quelques minutes. Voici ce que vous pouvez attendre :
- Tous les meilleurs plugins inclus, comme
PostGIS,PgVectoret plus encore.- Accès facile à l’interface web PgAdmin pour une gestion simplifiée de vos bases de données.
- Mises à jour simples, en un clic, pour garder votre déploiement à jour.
- Performance fiable et sécurité renforcée sur votre propre infrastructure privée et dédiée.
Si vous cherchez à gagner du temps et à optimiser votre flux de travail, l’hébergement cloud TimescaleDB de Stackhero est pensé pour rendre votre expérience aussi fluide que possible. Essayez-le en aussi peu que 5 minutes !
Vous pouvez enregistrer cette configuration sous .gitlab-ci.yml. Avec ce setup, chaque pipeline crée une nouvelle instance TimescaleDB pour vos tests.
test:
image: ubuntu:24.04
variables:
STACK_NAME: "ci-timescaledb-$CI_PIPELINE_ID-$CI_JOB_ID"
INSTANCE: "10G" # Modifiez si besoin (voir étape 3)
REGION: "europe"
SERVICE_STORE: "timescaledb"
# STACKHERO_TOKEN provient de la variable CI/CD créée à l'étape 1.
script:
- set -euo pipefail
- curl -fsSL https://www.stackhero.io/install.sh | sh
- apt-get update && apt-get install -y --no-install-recommends jq curl postgresql-client
- STACK_ID=$(stackhero --format=script stack-create --name="$STACK_NAME")
- echo "STACK_ID=$STACK_ID" >> deploy.env
- SERVICE_ID=$(stackhero --format=script service-add --stack="$STACK_ID" --service-store="$SERVICE_STORE" --instance="$INSTANCE" --region="$REGION")
- echo "SERVICE_ID=$SERVICE_ID" >> deploy.env
- stackhero service-wait-for --service="$SERVICE_ID"
- 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 est accessible depuis la CI."
# Vous pouvez lancer votre propre suite de tests ici avec les identifiants ci-dessus ...
after_script:
- test -f deploy.env && . ./deploy.env || true
- >
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
Sur GitLab, le nettoyage s'effectue dans after_script. Cette section est toujours exécutée, même si le job échoue, ce qui garantit la suppression de vos ressources TimescaleDB et évite toute facturation inutile.
Sur GitLab,
after_scripts'exécute dans un shell vierge. Pour gérer cela, le script écrit les IDs du service et de la stack dansdeploy.envpendant le job, puis les recharge avant le nettoyage. Ainsi, même en cas d'échec en cours de job, vos ressources sont bien supprimées.
Voilà le cycle CI complet pour TimescaleDB : création d'une stack, ajout du service, attente, récupération des identifiants, smoke test, et nettoyage systématique. Chaque exécution de pipeline bénéficie d'un service réel et isolé, sans rien laisser tourner après coup. Pour plus d'informations sur les commandes disponibles et l'authentification non interactive avec STACKHERO_TOKEN, vous pouvez consulter la documentation CLI complète.