Smart deploy, simplify the .gitlab-ci.yml syntax by assuming Kubernetes
Description
Deploying via shell scripts is powerful in that it's incredibly flexible, but sometimes it's too cumbersome, ugly, or not functional enough. We need a higher-level construct, especially for deploys, that let's developers easily configure common deployment scenarios.
Proposal
- Introduce specific keywords for various deployment scenarios such as
kubernetes
, ideally through extensible plugins (gitlab-ce#14178). - The deploy plugin may run in the context of the GitLab rails server rather than the GitLab runner. There are various pros and cons to this.
- Running in Rails allows access to deployment variables without having to expose them to the runners.
- Running in Rails allows easier return of richer information than simple pass/fail exit code. e.g. return information needed for connecting a terminal to a container. (Runners could support this, but we'd have to extend the API)
- Plugins running in Rails might be more approachable than writing in Go.
- Either way, the plugin would be able to directly connect services via API without needing scripts or CLIs.
- Plugins could be tightly tied to Services to provide the ability to store variables or otherwise configure deployment at a project level (gitlab-ce#23859)
- Richer interactions could allow actions beyond simple deployment such as:
- access a terminal that connects to running environments
- smart monitoring of deployments
- incremental/rolling deploys, canary deploys, blue/green deploys, traffic vectoring, etc.
- simplifying closing environments
- restart/pause/etc of environments
- The obvious downside is that this would be GitLab-specific, and up to us to maintain as things change.
review_app:
kubernetes:
pod: my/pod/file
variables:
MY_APP_DOMAIN: review-$DOMAIN.app.com
environment:
name: review/$APP
Links / references
- From https://gitlab.com/gitlab-org/gitlab-ce/issues/22864#note_16790373 and gitlab-ce#23286
- GitLab Runner plugins: gitlab-ce#14178
/cc @ayufan
This page may contain information related to upcoming products, features and functionality. It is important to note that the information presented is for informational purposes only, so please do not rely on the information for purchasing or planning purposes. Just like with all projects, the items mentioned on the page are subject to change or delay, and the development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.