Author: Hayden Smith 2021
Why?
What?
Deployment: Activities relating to making a software system available for use.
Diagrams sourced from atlassian, gitlab, microsoft
Every CSE student has a public_html folder that is exposed to the internet.
Historically, deployment was a much less frequently occurring process.
Code would be worked on for days at a time without being tested, and deployed sometimes years at a time. This is largely due to software historically being a physical asset
Two major changes have occurred over the last 10 years:
These changes (and more) have allowed for the pushing of updated software to users to be substantially more possible. Subsequently, users have come to expect more rapid updates.
A movement from software as an asset, to software as a service, has catalysed this transition
Service vs Asset
A simple case study can be found in Microsoft's movement of Windows from shipping a product, to shipping a service.
To achieve rapid deployment cycles, modern deployment isn't as simple as pushing code. Rather, a heavily integrated and automated approach is preferred.
Continuous integration: Practice of automating the integration of code changes from multiple contributors into a single software project.
Continuous delivery: Allows accepted code changes to be deployed to customers quickly and sustainably. This involves the automation of the release process such that releases can be done in a "button push".
Continuous delivery is often concerned with more than just going from "your computer" to a "production environment".
Often we have various stages of release
e.g. dev => test => prod.
As you move down the stages, things tend to be more stable.
It is common to have 3 core tiers:
Continuous Deployment is an extension of Continuous Delivery whereby changes attempt to flight toward production automatically, and the only thing stopping them is a failed test
For 21T3 COMP1531 has decided to use a free service known as "alwaysdata" to let students deploy their backend to the cloud.
Instructions of how to set this up are found in the project repository for iteration 3. We have pre-recorded a brief demo in lectures.
A decade ago, the notion of dev ops was quite simple. It was a role dedicated to gluing in the 3 key pillars of deploying quality assured software
DevOps is a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production, while ensuring high quality [Wikipedia. Yes, Wikipedia]
As development teams become less silo'ed, modern DevOps is less a role, and more a series of roles or aspect of a role.
Maintenance: After deployment, the use of analytics and monitoring tools to ensure that as the platform is used and remains in a healthy state.
Monitoring often has two purposes:
Maintenance: After deployment, the use of analytics and monitoring tools to ensure that as the platform is used and remains in a healthy state.
Health is defined by developers, but often consists of:
Often these aren't actively monitored, but rather monitored with alerts and triggers