CI system consists of master and slave, joined together by shared filesystem. Masters create tasks for slaves. Slaves take those tasks and create jobs with computation results. ┌───┐ ┌──────────┐ ┌───┐ ┌──────────┐ ┌───────────┐ │git│ │task-maker│ │NFS│ │task-taker│ │job-starter│ └─┬─┘ └────┬─────┘ └─┬─┘ └────┬─────┘ └─────┬─────┘ │ revs/$COMMIT │ │ │ │───────────────────────────────────>│ │ │ │ │ │ │ │ │ │ revs/$COMMIT │ │ │ │ │ <────────────────│ │ │ │ │ │ │ │ │ │ mkdir $CTR/+1 │ │ │ │ │ ────────────────>│ │ │ │ │ │ │ │ │ │ rc=0 │ │ │ │ │ <────────────────│ │ │ │ │ │ │ │ │ │ $TASKS/$CTR:task │ │ │ │ │ ────────────────>│ │ │ │ │ │ │ │ │ │ │ $TASKS/$CTR:task │ │ │ │ │─────────────────────> │ │ │ │ │ │ │ │ │mkdir $JOBS/$CTR:task│ │ │ │ │<───────────────────── │ │ │ │ │ │ │ │ │ rc=0 │ │ │ │ │─────────────────────> │ │ │ │ │ │ │ │ │ │ $JOBS/$CTR:task │ │ │ │ │ ────────────────────>│ │ │ │ │ │ │ │ │ touch $JOBS/$CTR:task/alive │ │ │ │<───────────────────────────────────────────│ │ │ │ │ │ │ │ │ │ │────┐ │ │ │ │ │ │ "steps-runner" │ │ │ │ │<───┘ │ │ │ │ │ │ │ │ touch $JOBS/$CTR:task/finished │ │ │ │<───────────────────────────────────────────│ │ │ │ │ │ │ │ │ │ │ [CI/Task] [CI/Job] [CI/Daemontools] [CI/Master] [CI/Slave] [CI/Reporter] [CI/Notifier]