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]