User Tools

Site Tools


projects:ci:start

This page describes the behavior of the CI.

Le Comte Intatto

Le CI est un serveur d'intégration continue. Dans le cadre de Hoa, le CI sera tout d'abord utilisé pour du test, la partie build étant mise de côté pour l'instant. Le fonctionnement est basiquement le suivant : pour chaque commit, une ou plusieurs suites de tests seront exécutées sur le code patché.

Vocabulaire

Cette section définit quelques notions de vocabulaires :

  • primary/standby : « maître »/« esclave » (ce vocabulaire étant déprécié, il faut utilisé le nouveau). Le primary est le front-end du CI, c'est la partie qui reçoit les ordres et les dispatche. Les standby sont des « nœuds » placés dans des VM qui sont chargés d'exécuter des scripts ;
  • worker : processus en mode démon qui permet de désynchroniser le traîtement des tâches ;
  • job : une tâche à faire ;
  • payload : requête reçue par le CI qui déclenche un job (dans notre cas : exécuter les tests sur un certain code).

Fonctionnement

Le schéma le plus basique est le suivant :

  1. un payload est reçu sur le primary ;
  2. le primary va démarrer un job :
    1. le primary démarre un worker qui va traiter le job ;
    2. le worker notifie les standby du job, autrement dit, il dispatche le job :
      1. les standby traitent le job (grâce, également, à des workers).
  3. le primary rapporte l'état courant des standby (état des tests, sortie des logs etc.)
               payload
                  +
                  |
                  |                                                             +-----------------+
                  v                                                             |                 |
       +-----------------------+                                         +----->|  standby (VM1)  |
       |                       |                                         |      |                 |
       |         hook          |                                         |      +-----------------+
       |                       |            +----------------------+     |
       +-----------------------+            |                      |     |      +-----------------+
       |                       |      +---->|       worker 1       +<----+      |                 |
       |                       |      |     |                      |     +----->|  standby (VM2)  |
       |                       |      |     +----------------------+     |      |                 |
       |                       |<-----+                                  |      +-----------------+
       |                       |                                         |
 read  |        primary        |                                         |      +-----------------+
 +---->|                       |<-----+                                  |      |                 |
       |                       |      |                                  +----->|  standby (VM3)  |
       |                       |      |                                         |                 |
       |                       |      |     +----------------------+            +-----------------+
       |                       |      |     |                      |
       |                       |      +---->|       worker 2       |
       |                       |            |                      |
       +-----------------------+            +----------------------+

Le primary échange avec les workers grâce à des WebSockets, tout comme les workers avec les standby (et les standby potentiellement avec leurs propres workers). Ceci permet :

  1. de faciliter les communications entre les parties du programme ;
  2. d'avoir des retours en temps-réel sur le primary (presque par effet de bord).

//Monitoring// des //standby//

Voir SNMP

TODO

Cette liste ne contient pas les premiers éléments.

Primary :

  • WebSocket en lecture seule pour les clients
  • logs
    • //live stream//
    • restaurer les logs manqués en cas de //live//
    • sauvegarder les logs
  • améliorer l'interface
  • nouveau //job// affiché en temps réel sur la //home//
  • notifier du statut des //jobs// (voir ''Status API'' pour Github)
  • notifier sur Marvirc

Standby :

  • ajouter le support de Composer
  • améliorer le support de Composer
  • mise à jour automatique
  • droits, utilisateur et groupe pour le CI
  • démarrage automatique du //pool// de VM PHP
projects/ci/start.txt · Last modified: 2014/08/20 09:05 by hywan