Reduce deploy times by way of not deploying components that are not upgraded
Goal Statement
I'd like to reduce the time it takes to deploy by adding a variable into Deployer's decision making. Hypothetically, we could reduce deploy times to production by at least 45 minutes by way of simply skipping our Gitaly and Praefect fleets.
Solution Statement
Release-tools already understands whether or not a particular change is made to our code base when creating a tag. Gitaly and Praefect take up a large amount of time due to the sheer number of servers that are running. As the release-coordinated pipeline is kicked off by release-tools, I'd like to inject knowledge of whether or not Gitaly changed. If not, send this information into Deployer, which will skip deploying to our Gitaly and Praefect fleets entirely.
Pros/Cons
- Pros: Reduces MTTP by roughly 45 minutes
- Pros: We touch less infrastructure as a whole within some of our Deployments which should reduce our risk footprint
- Pros: We should be able to deploy slightly faster, maybe in the future reducing the diff between packages? Which would be a good risk reduction in the future
- Con: Changes to omnibus may not be deployed
- Con: This reduction will only be seen when changes to Gitaly are not detected. Should Gitaly be changed, deploy times will not change, thus no value add.
- Con: The reduction of deployments to staging will be minimal, about 10 minutes
- Con: Adds new logic to our Deployment System
Milestones
-
Discussion -
Apply the solution or abandon the idea
Edited by John Skarbek