Qu’est-ce qu’un exécuteur ?

Un exécuteur Semaphore UI est une instance autonome de Semaphore sans interface utilisateur. Il se connecte à votre serveur Semaphore principal, récupère les tâches et les exécute. Les exécuteurs peuvent être hébergés sur des serveurs distincts, dans n’importe quelle région ou n’importe quel réseau, totalement indépendamment de l’endroit où se trouve votre interface Semaphore.

Quel problème cela résout-il ?

Sans exécuteurs, toutes vos tâches d’automatisation s’exécutent sur un seul serveur. Cela fonctionne bien au début, mais à mesure que votre équipe, ou le nombre d’équipes, grandit, trois problèmes ont tendance à apparaître :

  • Charge. Une grande file de tâches qui se disputent les ressources d’un seul serveur ralentit tout.
  • Isolation. Lorsque plusieurs équipes partagent le même environnement d’exécution, un pipeline défectueux peut affecter tout le monde.
  • Géographie. Ansible se connecte à vos serveurs via SSH. Si votre infrastructure se trouve à Sydney mais que votre instance Semaphore est à Francfort, chaque déploiement passe par une connexion intercontinentale. Les exécuteurs résolvent ces trois problèmes.

Exécuteurs globaux vs exécuteurs de projet

Semaphore propose deux types d’exécuteurs, et la différence compte si vous évaluez le plan Pro.

Fonctionnalité Exécuteurs globaux (OSS) Exécuteurs de projet (Pro)
Disponible dans OSS (gratuit) Pro
Répartition de charge
Isolation réseau
Routage par tags
Contrôle par projet

Les exécuteurs globaux sont attribués aléatoirement entre tous les projets. C’est excellent pour répartir la charge, mais vous ne pouvez pas contrôler quel exécuteur prend quelle tâche. Les exécuteurs de projet vous permettent d’attacher un tag à n’importe quel template ou inventaire, puis d’acheminer des tâches précises vers des exécuteurs précis. C’est ce qui permet l’isolation et le routage géographique.

3 cas d’usage concrets pour les exécuteurs

  1. Plusieurs équipes, zéro interférence Votre équipe plateforme et votre équipe produit utilisent toutes deux Semaphore. Elles travaillent indépendamment - projets différents, serveurs différents, tolérance au risque différente. Avec les exécuteurs de projet, chaque équipe obtient son propre exécuteur. Si l’exécuteur d’une équipe tombe en panne, l’autre ne s’en rend même pas compte.

  2. Infrastructure distribuée sur plusieurs régions Votre site web s’exécute dans un centre de données à New York. Un service backend s’exécute en Australie. Avec un seul exécuteur centralisé en Europe, chaque déploiement passe en SSH à travers la planète : c’est lent et inutile.

    Installez un exécuteur à New York et un autre en Australie. Taguez vos inventaires en conséquence. Désormais, chaque tâche se connecte localement, à l’intérieur du même réseau, à pleine vitesse. Des déploiements plus rapides et une surface d’attaque réduite en bonus.

  3. Réduire les coûts cloud avec des webhooks + AWS Lambda Ce point mérite qu’on s’y attarde, car il s’agit d’une vraie optimisation de coûts. Les exécuteurs prennent en charge les webhooks sur deux événements : le début d’une tâche et la fin d’une tâche. Vous pouvez vous en servir pour démarrer et arrêter automatiquement des ressources cloud.

    Voici l’installation : votre exécuteur tourne sur une instance AWS EC2. Quand elle fonctionne, elle coûte de l’argent. Quand elle est arrêtée, elle ne coûte rien.

    • Au démarrage d’une tâche -> un webhook déclenche une fonction Lambda -> Lambda démarre l’instance EC2 -> l’exécuteur se met en ligne, se connecte à Semaphore et récupère la tâche
    • À la fin d’une tâche -> un autre webhook déclenche une autre Lambda -> Lambda arrête l’instance EC2

    Votre exécuteur ne tourne que lorsqu’il travaille réellement. Pour les équipes avec des charges irrégulières, cela peut à lui seul justifier le plan Pro.

Comment configurer un exécuteur de projet

  1. Accédez aux paramètres de votre projet et ouvrez l’onglet Runners. Vous verrez ici les exécuteurs existants.

  2. Cliquez sur New Runner. Donnez-lui un nom et un tag, par exemple new-york.

  3. Après l’enregistrement, Semaphore génère deux identifiants : un token, stocké des deux côtés et utilisé pour l’identification, et une clé privée, stockée uniquement sur l’exécuteur et utilisée pour chiffrer les données en transit. Téléchargez la clé privée : vous en aurez besoin à l’étape suivante.

  4. Déployez l’exécuteur sur votre serveur cible. Le plus simple est d’utiliser Docker :

    docker run \
    -e SEMAPHORE_WEB_ROOT=https://semaphore.example.com \
    -e SEMAPHORE_RUNNER_TOKEN=/ADwjSWmWV8FZB4pwQaaEOWgqIdOR+oDOeOXe2a3JD0= \
    -e SEMAPHORE_RUNNER_PRIVATE_KEY_FILE=/config.runner.key \
    -v "/path/to/private/key:/config.runner.key" \
    -d semaphoreui/runner:v2.17.28
    

    Vous pouvez aussi utiliser la commande de configuration interactive :

    semaphore runner setup
    
  5. De retour dans Semaphore, ouvrez n’importe quel template ou inventaire et attribuez-lui le tag d’exécuteur new-york. Cette tâche s’exécutera désormais toujours sur votre exécuteur de New York.

Taguer les inventaires, pas seulement les templates

Il existe une façon plus intelligente d’acheminer les tâches si vous avez des serveurs regroupés par région ou par réseau. Au lieu de taguer chaque template individuellement, vous pouvez attribuer un tag d’exécuteur directement à un inventaire.

Un inventaire dans Semaphore est une liste d’adresses IP qu’Ansible utilise pour se connecter à vos serveurs. Si vous savez qu’un certain groupe de serveurs se trouve à New York, taguez cet inventaire avec new-york. À partir de là, tout template qui utilise cet inventaire s’exécutera automatiquement sur l’exécuteur de New York, sans configuration spécifique par template.

C’est particulièrement utile lorsque vous ajoutez de nouveaux templates. Vous choisissez le bon inventaire, et le routage des exécuteurs fonctionne tout seul.

Une dernière chose : les limites de concurrence

Si vous souhaitez limiter la concurrence, définissez un nombre maximal de tâches parallèles par exécuteur. Par défaut, c’est illimité (0). Si vous le réglez sur 5 et que cet exécuteur est déjà occupé, Semaphore redirigera la tâche vers un autre exécuteur portant le même tag.

Prêt à essayer ?

Les exécuteurs de projet sont disponibles dans le plan Semaphore Pro. Si votre équipe rencontre l’un des scénarios ci-dessus - files de tâches qui grossissent, plusieurs équipes, infrastructure distribuée - cela mérite d’être exploré.