Manual

A deployment could mean "upload through FTP" the new version of the website. It could also mean, "perform a git pull" on the production server, or some other similar way of deploying a new version of our application.

Needless to say this was tricky, for several reasons:

  • How does the system behave when in the middle of a deployment?
    • Can a request fail because it hit a codepath when the latest version of the application wasn't fully deployed?
  • If a certain logical change requires a database migration, or persistency migration
    • How is it performed?
    • Is it safe to re run this migration, if run by mistake?
    • Does it require service downtime until the migration is done?
  • How to check whether the newly deployed version of the application is performing normally?
    • What will signal us if the deployment is failing?
    • Will we notice before all our users notice?
  • If proven problematic, how to rollback the deployment?
    • If database migration, or persistency migration was required, how to rollback this as well?
  • How fast can we react upon these events, without committing more mistakes along the way?

Tools like Capistrano have emerged in order to perform a set of commands on different machines.