Improve release procedure
Currently we have a rigid release.
When we tag a release, packages get released to the public right away.
We don't officially announce the release until we deploy to staging and then to production. Also deploy the blog post.
This is a problem because the packages are accessible regardless of what we find during the deploy. This has caused both problems and confusion.
During a short brainstorming session with @pcarranza we decided to try and leverage more of our CI. The changes should be minimal to both the Build Team and Production Team.
Idea is to:
- Instead of uploading the package to S3, we would push package as artifact
- Leverage enivronments feature to fetch the uploaded artifact
- In staging step, push to a separate package repository. This would be the minimal change for Production team, just switch out the repository urls in staging
- Once confirmed that all is ok, in a manual production step we would fetch the same artifact and push it to the public repo.
- The last step is a manual task for RM, push the button to push to public repository.
TODO:
-
Add packages as artifacts https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1404 -
After package is built, add environment support(named staging) in CI -
Add code that'll push all packages to a temporary repository(OK to be private at start). This needs to be idempotent. -
During this stage we can also build a temp Docker image and push it to registry -
Create manual environment(named production) which will download the artifacts and push to correct public repo
Edited by Marin Jankovski