Continuous Automated Deploy

Why

Compared to a manual deployment, an automatic deployment requires no need for any DevOps to be available for a release and enables a quick time-to-market. This also increases the focus on development rather than deployment. Automating this process makes it repeatable and allows for continuous deployment. When deploying regularly, changes are kept small and the impact / risk is minimized, allowing releases to be easily reversible.

Prepare for success

Use the same scripts as on the staging environment (where the release has been tested extensively). Have Managed Services involved on the staging deployments as well.

How

Just merge the new code into the project and smoke-test!

Definition of Done[1]

Smoke test succeeded.

Real Life Example

We apply automatic deployment to our own internally developed colleague appreciation tool: Kudo-o-Matic. The project is set up in such a way that when the code of a new feature or bugfix is ready for acceptance by the Product Owner, it gets merged into the project and automatically deployed to a test-environment. The Product Owner can then test and review the changes. When satisfied the application can eventually be deployed to production with a single click.

There is also a cross-platform mobile application for the Kudo-o-Matic which uses Fastlane for automatic deployment through a third party beta distribution service (e.g. HockeyApp). Stakeholders (Product Owner[2], developers and end-users) can use this service with registered devices to test and accept new changes made to the app on their own phone. After acceptance by the Product Owner, Fastlane will push the new features automatically to the configured App stores like the App Store (iOS) and Google Play Store (Android).


Notes

  1. Definition of Done - A shared understanding of expectations that the Increment must live up to in order to be releasable into production. Managed by the Development Team.
  2. Product Owner - The Product Owner plays a crucial role in the development of a great software product. He or she is responsilble for maintaining the Product Backlog.