Addressing technical debt in the AutoDeploy foundation
We created the current auto-deploy behavior during a one-week onsite in early 2019. The result was rapid iteration on a hard problem in a short time and as a result, we got something working but accumulated some technical debt in the process.
As we begin adding more complexity to the auto-deploy process with CNG images, and auto-deploying other components like Gitaly, this problem will only get worse, so I think it would be prudent to address some of the problems now.
-
PassingBuild
is misnamed. This class, along with the generically-namedCommits
, handles multiple things:- Find a passing build
-
Trigger an Omnibus auto-deployCreate a deployer tag to deploy the Omnibus package after it's built
-
Trigger a CNG auto-deploy=> !841 (merged) -
Trigger a generic branch tagging=> !859 (merged)
-
=> #390 (closed)PassingBuild
takes aproject
argument, because at the time we needed to find a passing build (or do one of the other things above) in CE or EE. Now that we only care about EE, this is needless complexity. -
PassingBuild
takes aref
argument. This is never not the current auto-deploy branch, so it's extra complexity. -
=> !1059 (merged)ComponentVersions
does three independent things:- Deal with the component versions defined by the
gitlab-rails
project (EE)- Fetch the version strings defined by the various
*_VERSION
files
- Fetch the version strings defined by the various
- Deal with the component versions defined by the Omnibus project
- Check if the versions defined in Omnibus differ from those we fetched from EE
- Commit to Omnibus with the versions fetched from EE
- Deal with the component version variables defined by the CNG image
- Normalize the version strings used by Omnibus into formats usable by the image
- Fetch and parse the Gemfile for EE
- Add version strings for specific gems from EE
- Check if the versions defined in the image differ from those we fetched from EE
- Commit to the image with the versions fetched from EE
- Deal with the component versions defined by the
-
=> #394 (closed)ComponentVersions
takes aproject
argument, because at the time we needed to find a versions (or do one of the other things above) in CE or EE. Now that we only care about EE, this is needless complexity.
cc @gitlab-org/deliveryf
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information