Aller au contenu principal

Clé de stack et arborescence

Clé de stack​

La clé identifie une stack. Elle est dérivée du jeton vérifié, jamais de la requête :

<key> = slug(project_path) + "-" + slug(environment)

Le slug reproduit CI_PROJECT_PATH_SLUG de GitLab : minuscules, tout caractère autre que a-z et 0-9 devient -, tirets de début et de fin retirés, tronqué à 63 octets. Les tirets consécutifs ne sont pas fusionnés.

project_pathenvironmentClé
group/appstaginggroup-app-staging
Apps/Atmosphere/Shopproductionapps-atmosphere-shop-production
acme-shop/apistagingacme-shop-api-staging
acme/shop-apistagingacme-shop-api-staging (collision)

environment est le nom de l'environnement. Pour les noms simples (lettres et chiffres, 24 caractères au plus, commençant par une lettre), le slug est égal à CI_ENVIRONMENT_SLUG. Pour les autres noms, GitLab ajoute un suffixe de hachage à CI_ENVIRONMENT_SLUG et les slugs diffèrent.

Chaque commande compose est limitée à la clé : docker compose -p <key> --project-directory COMPOSE_BASE/<key> -f COMPOSE_BASE/<key>/docker-compose.yml.

Propriété​

EndpointClé libreClé du project_id appelantClé d'un autre projet
POST /deployAutorisé, revendiquée après un up réussiAutorisé403
POST /directoriesAutorisé, reste libreAutorisé403
POST /exec403Autorisé403
DELETE /stack403Autorisé, propriété libérée403

Le registre stocke aussi le project_path et l'environment exacts de chaque clé. Un autre projet qui atteint la même clé avec un couple différent reçoit un 403 distinct, et l'avertissement registry: key collision between distinct deployments est journalisé. Un arrêt automatique conserve la propriété.

Arborescence sur disque​

CheminContenuSupprimé par
DATA_DIR/registry.jsonPropriété de chaque cléJamais (entrées libérées par DELETE /stack)
DATA_DIR/autostop.jsonArrêts automatiques en attente, indexés <namespace>/<environment>Jamais (entrées retirées une fois exécutées ou annulées)
COMPOSE_BASE/<key>/docker-compose.yml et les fichiers d'environnement envoyésDELETE /stack, arrêt automatique
COMPOSE_BASE/.staging-<key>-*Un déploiement en cours de validationLe déploiement lui-même
WEBSITES_BASE/<key>/<service>/<name>/Données applicatives (bind mounts)Jamais

Les fichiers d'état sont écrits de façon atomique (fichier temporaire, renommage, fsync du répertoire).

registry.json​

C'est aussi le format du fichier de -import-registry. Un objet JSON indexé par clé de stack ; chaque valeur est un objet d'entrée ou une simple chaîne project_id.

{
"group-app-staging": {
"project_id": "42",
"project_path": "group/app",
"environment": "staging"
},
"other-production": "7"
}
ChampObligatoireDescription
project_idouiID du projet GitLab propriétaire de la clé
project_pathnonChemin exact du projet ; active la détection des collisions
environmentnonNom exact de l'environnement ; active la détection des collisions
claimed_atnonPar défaut, l'heure de l'import

À l'import, une clé déjà détenue par un autre project_id annule tout l'import. Une clé détenue par le même project_id est conservée et ses champs manquants sont complétés.