Variables runtime
Comment les variables projet deviennent des variables d'environnement Playwright et comment les jobs les utilisent.
Sur cette page
Les variables runtime permettent a un projet de fournir des valeurs a une execution Playwright sans les coder en dur dans le script. Elles conviennent aux cles API, IDs de file, IDs projet, noms de tenant, hosts cibles ou flags utilises pendant l'execution.
Fonctionnement de l'injection
Variable projet
Stockee en clair ou sous forme de metadonnees de secret chiffre.
Resolution backend
Construit env_vars et secret_env_keys pour l'execution.
Processus worker
Fusionne les variables autorisees dans l'env enfant Playwright.
Test Playwright
Lit les valeurs avec process.env.NAME.
Au moment du dispatch, le backend lit project_variables pour le projet. Les variables simples sont copiees directement. Les variables secretes sont dechiffrees seulement si l'appelant est autorise a utiliser les variables. Le backend envoie les valeurs resolues au worker dans env_vars, avec secret_env_keys pour la redaction.
Le worker demarre Playwright avec ces valeurs dans l'environnement du processus enfant. Le script les lit via process.env.
const PROJECT_ID = requiredEnv('HAPPY_PATH_QUEUE_PROJECT_ID');
const QUEUE_ID = requiredEnv('HAPPY_PATH_QUEUE_ID');
const API_KEY = requiredEnv('HAPPY_PATH_QUEUE_API_KEY');
function requiredEnv(name: string) {
const value = process.env[name]?.trim();
if (!value) throw new Error(`Missing required runtime variable: ${name}`);
return value;
}Contrat cote job
| Nom | Nom de variable d'environnement en majuscules, par exemple HAPPY_PATH_QUEUE_API_KEY. |
| Valeur | Injectee dans le processus Node Playwright sous process.env.NAME. |
| Secret | Dechiffre seulement pour les executions autorisees a utiliser les variables, puis masque dans les logs. |
| Page navigateur | Pas automatique. Passez explicitement les valeurs du processus de test a page.evaluate ou aux requetes. |
Une variable est disponible uniquement dans le processus Node qui lance Playwright. Elle n'est pas automatiquement disponible dans le JavaScript de l'application chargee dans Chromium, Firefox ou WebKit.
Si la page navigateur a besoin de la valeur, transmettez-la explicitement :
const tenant = requiredEnv('TEST_TENANT');
await page.evaluate((tenantName) => {
window.localStorage.setItem('tenant', tenantName);
}, tenant);Noms et prefixes reserves
Les variables du bridge SDK natif utilisent l'espace reserve BERNOPS_ et sont injectees puis renouvelees par le worker. Les jobs ne doivent pas les definir ni les copier. Consultez la selection de transport du SDK.
Les noms utilisent la syntaxe des variables d'environnement : lettres majuscules, chiffres et underscores, sans commencer par un chiffre.
Bons exemples :
HAPPY_PATH_QUEUE_API_KEYHAPPY_PATH_QUEUE_IDTARGET_TENANTCHECKOUT_REGION
N'utilisez pas les noms ou prefixes reserves comme PATH, HOME, AB_LOG_URL, BERNOPS_*, SUPABASE_*, NEXT_PUBLIC_*, PLAYWRIGHT_*, npm_* ou npm_config_*.
Comportement des secrets
Les secrets sont stockes chiffres et sont write-only dans l'interface. Pendant l'execution, BernOps les dechiffre pour le processus worker, enregistre leurs valeurs dans le redacteur du worker et evite d'exposer la valeur secrete dans les metadonnees d'execution.
Les metadonnees d'execution enregistrent les noms de variables resolues, si chaque variable est secrete et sa version. Elles ne stockent pas le plaintext secret.
Modele de permission
Les executions lancees avec un JWT utilisateur recoivent les variables projet non secretes par defaut. Les secrets sont injectes pour les admins projet seulement si la requete definit explicitement include_secret_variables: true. Les executions de jobs enregistres lancees par cle API recoivent automatiquement les secrets quand la cle a variables:use, sauf si la requete definit explicitement include_secret_variables: false.
C'est important pour l'execution de jobs enregistres depuis la CI. Si le script appelle requiredEnv('HAPPY_PATH_QUEUE_API_KEY'), une cle appelante avec variables:use recoit ce secret autorise par defaut. Une cle sans variables:use, ou une requete qui desactive explicitement les secrets, demarre sans ce secret et le script echoue avec l'erreur de variable manquante.
Variables d'URL de base
BASE_URL et TARGET_URL sont speciales. Si la requete d'execution ne fournit pas d'URL de base, BernOps cherche d'abord ces noms dans les variables runtime. Sinon, il utilise http://localhost:3000.
Le worker force aussi BASE_URL et TARGET_URL vers l'URL finale resolue pour que les jobs puissent utiliser l'un ou l'autre nom.
Diagnostiquer une variable manquante
Quand un job signale Missing required runtime variable, verifiez dans cet ordre :
- La variable existe sur le bon projet.
- Le nom correspond exactement, underscores inclus.
- L'appelant peut utiliser les secrets : admin projet pour un JWT, ou
variables:usepour une cle API. - Le nom n'est pas reserve et a ete accepte a l'enregistrement.
- L'execution utilise le projet attendu, pas un autre projet avec un job similaire.