GitLab - 5.19 Exécuter un processus GitLab en arrière-plan

Un job de déploiement qui lance une application en continu ne se termine jamais. GitLab le fait alors échouer après le délai d'expiration, et les travaux suivants ne s'exécutent pas. Cette leçon montre comment lancer l'application en arrière-plan pour libérer le terminal.

Comprendre l'échec du job

Le délai d'expiration est fixé par défaut à une heure. Une application lancée au premier plan bloque le terminal. Lorsque la durée dépasse le délai, le job échoue, même si le déploiement a réussi.

Le pipeline est alors marqué en échec, et les travaux placés après ce job ne sont jamais exécutés.

Lancer l'application en arrière-plan

La solution consiste à demander à la commande de ne rien afficher, et de détacher le processus du terminal. On redirige la sortie standard vers /dev/null, puis l'erreur standard vers la sortie standard. Le symbole esperluette, placé à la fin, lance la commande en tâche de fond.

Remplacez l'espace réservé par le fichier qui démarre votre application.

node <fichier-de-l-application> > /dev/null 2>&1 &

Vérifier le résultat

Avec cette commande, l'étape de déploiement se termine dès que la commande est lancée. Les travaux placés après le déploiement ne sont plus bloqués et s'exécutent immédiatement.

En résumé

Une application qui tourne en continu bloque le terminal et fait expirer le job. Lancer la commande en arrière-plan libère le terminal. Le pipeline peut alors se terminer avec succès.

Points clés

  • Le délai d'expiration par défaut d'un job est d'une heure.
  • Une application lancée au premier plan bloque le terminal.
  • La redirection vers /dev/null supprime la sortie de la commande.
  • Le symbole esperluette lance la commande en tâche de fond.
  • Les travaux suivants s'exécutent dès que la commande est lancée.

Questions fréquentes

Pourquoi rediriger la sortie vers /dev/null ?

L'objectif est que la commande ne produise aucune sortie dans le terminal du job.

Le job échoue-t-il toujours après une heure ?

Oui, si la commande reste au premier plan et dépasse le délai d'expiration, qui est d'une heure par défaut.

Que fait le symbole esperluette ?

Il exécute la commande en tâche de fond. Le terminal est alors libéré immédiatement.