Pass app service env and improve health diagnostics

This commit is contained in:
Daniel Schädler 2026-04-11 17:00:50 +02:00
parent 7f07ededcf
commit ea43f96898
2 changed files with 20 additions and 2 deletions

View File

@ -41,6 +41,15 @@ rails e2e spec:
alias: postgres alias: postgres
- name: $CI_REGISTRY_IMAGE/production/commits:$CI_COMMIT_SHA - name: $CI_REGISTRY_IMAGE/production/commits:$CI_COMMIT_SHA
alias: app alias: app
variables:
POSTGRES_URL: postgres://turniere:turniere@postgres:5432/turniere_blackbox
POSTGRES_USERNAME: turniere
POSTGRES_PASSWORD: turniere
SECRET_KEY_BASE: turniere-blackbox-secret-key-base-please-change-in-real-prod
MAILGUN_API_KEY: blackbox-test-api-key
MAILGUN_DOMAIN: blackbox.example.com
RAILS_LOG_TO_STDOUT: "1"
RAILS_SERVE_STATIC_FILES: "1"
command: command:
- bundle - bundle
- exec - exec

View File

@ -7,6 +7,7 @@ import signal
import subprocess import subprocess
import time import time
import urllib.request import urllib.request
import urllib.error
from pathlib import Path from pathlib import Path
@ -46,16 +47,24 @@ def _wait_for_http(base_url=TEST_BASE_URL, timeout=60):
deadline = time.time() + timeout deadline = time.time() + timeout
healthz_url = f"{base_url}/healthz" healthz_url = f"{base_url}/healthz"
opener = urllib.request.build_opener(urllib.request.ProxyHandler({})) opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
last_error = None
while time.time() < deadline: while time.time() < deadline:
try: try:
with opener.open(healthz_url) as response: with opener.open(healthz_url) as response:
if response.status == 200: if response.status == 200:
return return
except Exception: last_error = f"unexpected status {response.status}"
except urllib.error.HTTPError as error:
body = error.read().decode("utf-8", errors="replace")
last_error = f"http {error.code}: {body}"
time.sleep(0.5)
except Exception as error:
last_error = repr(error)
time.sleep(0.5) time.sleep(0.5)
raise RuntimeError(f"healthcheck did not become ready within {timeout}s: {healthz_url}") detail = f" last error: {last_error}" if last_error else ""
raise RuntimeError(f"healthcheck did not become ready within {timeout}s: {healthz_url}.{detail}")
def _docker_compose_cmd(project_name=BLACKBOX_PROJECT, compose_file=BLACKBOX_COMPOSE_FILE): def _docker_compose_cmd(project_name=BLACKBOX_PROJECT, compose_file=BLACKBOX_COMPOSE_FILE):