Every release
I SSH into each server, pull the release, restart the service, and curl the health check, one machine at a time.
How it goes now
ssh web-1.git pull.sudo systemctl restart app.curl /healthz.Wait. Again.exit.ssh web-2.
Every release, every machine.
Tell Kitewell once
Build a chain workflow aimed at my web server group that pulls /srv/app with git, waits for my approval, restarts the app service, and checks http://127.0.0.1:8080/healthz on each machine before moving to the next.
That's the whole setup. Kitewell lays out every step for you to check, and nothing is saved until you apply it.
Then it runs on its own
Rollout · web groupRunning on this computer
- Pull the releaseA fast-forward pull on the machine.Done
- Wait for your OKThe restart waits for your approval, machine by machine.Waits for you
- Restart the serviceRuns after you approve.Done
- Check it answersSix tries, five seconds apart. A machine that never answers stops the rollout.Done
What you get instead
Rollout · web group
web-3 failed its health check. Rollout stopped.
- web-1Healthy
- web-2Healthy
- web-3No answer from /healthz
- web-4Untouched
Good to know
- Because the group stops on the first failure, a machine that fails its check halts the rollout with the rest untouched.
- Host keys are approved in the project, and any password comes from a secret, so the workflow holds neither.
What it needs
- The servers registered as a group: one machine at a time, stop on failure
More chores
- Every MondayEvery Monday I update our dependencies, run the tests, and lose the morning fixing whatever broke.
- Every morningEvery morning I open each pull request just to work out which one could break something.
- Every morningEvery morning I total yesterday's orders from a CSV export and write up the same little report.