PostgreSQL: 5. GitLab CI

Ši dokumentacija yra GitHub Actions ir GitLab CI vadovo dalis. Visą vadovą rasite čia: Paleiskite tikrą PostgreSQL paslaugą iš savo GitHub Actions arba GitLab CI pipeline, vykdykite testus ir automatiškai viską uždarykite.

👋 Sveiki atvykę į Stackhero dokumentaciją!

Stackhero siūlo visiškai administruojamą PostgreSQL cloud paslaugą, sukurtą patikimumui ir greičiui:

  • Neribotas prisijungimų ir duomenų perdavimų skaičius, užtikrinantis sklandų mastelį.
  • Įtraukta PgAdmin žiniatinklio sąsaja patogiam duomenų bazės valdymui.
  • Populiarios plėtiniai įtraukti, tokie kaip PostGIS, TimescaleDB ir PgVector.
  • Paprasti, vieno paspaudimo atnaujinimai užtikrina jūsų duomenų bazės saugumą ir naujumą.
  • Aukšta sparta ir stipri apsauga privačioje, dedikuotoje infrastruktūroje.

Pradėti naudotis Stackhero PostgreSQL cloud hosting galite vos per kelias minutes. Mėgaukitės patikima duomenų bazės patirtimi ir sutaupykite brangaus laiko duomenų valdymui.

Šią konfigūraciją galite išsaugoti kaip .gitlab-ci.yml. Su šiuo nustatymu kiekvienas pipeline paleidimas sukurs naują tikrą PostgreSQL instanciją jūsų testams.

test:
  image: ubuntu:24.04
  variables:
    STACK_NAME: "ci-postgresql-$CI_PIPELINE_ID-$CI_JOB_ID"
    INSTANCE: "10G"   # Pakeiskite jei reikia (žr. 3 žingsnį)
    REGION: "europe"
    SERVICE_STORE: "postgresql"
  # STACKHERO_TOKEN gaunamas iš CI/CD kintamojo, kurį sukūrėte 1 žingsnyje.
  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 "✅ PostgreSQL pasiekiamas iš CI."
    # Čia galite paleisti savo testų rinkinį naudodami aukščiau gautus prisijungimo duomenis ...
  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

GitLab aplinkoje išvalymas vykdomas after_script sekcijoje. Ši dalis visada bus vykdoma, net jei job'as nepavyks, todėl jūsų PostgreSQL resursai bus pašalinti ir jums nebus skaičiuojami mokesčiai už nenaudojamus resursus.

GitLab aplinkoje after_script vykdomas naujoje shell sesijoje. Todėl scenarijus job'o metu įrašo paslaugos ir stack ID į deploy.env ir prieš išvalymą juos įkelia iš naujo. Taip užtikrinama, kad net jei job'as nutrūktų, jūsų resursai vis tiek bus išvalyti.

Tai visas CI gyvavimo ciklas su PostgreSQL: sukurkite stack, pridėkite paslaugą, palaukite, gaukite prisijungimo duomenis, atlikite smoke testą ir visada išvalykite. Kiekvienas pipeline paleidimas gauna realią, izoliuotą paslaugą, o pabaigus niekas nelieka veikti. Daugiau informacijos apie galimas komandas ir neinteraktyvų STACKHERO_TOKEN autentifikavimą rasite pilnoje CLI dokumentacijoje.