Here is netflix’s deployment process:
Development environment, unstable service, frequent restart, etc. Generally, each developer builds a development environment locally.
Generally, it is developed locally and deployed to the integration environment for other partners to coordinate and integrate, and may also require service restart or the like.
A stable version of the integration environment is provided for other services in the test environment and is generally less restarted.
There is no need to distinguish so many small teams or projects. Excluding the developer’s local dev environment, the nominal offline environment is the integration/test.
Quasi-production environment is generally used for pre-launch of new functions and dogfood test. No problem can be solved to deploy the production environment.
The closer the staging environment is to the production environment, the better. In addition to the server configuration, the other best is the same as the production, such as other external services connected, connected databases, etc.
In addition, attention should also be paid to some technical implementation-related services, such as stateful services. If staging is single-instance, the problem may not be detected and needs to be distributed to expose the problem. For example, cas server calls back the client to set up a session. If the session is local, the session will not be shared for multi-instance clint.
If all the new functions are backwards compatibility’s, then feature toggle can be used, similar to gray scale deployment, so the staging environment can be weakened or even not used. However, this is an ideal situation. A small change in software development may affect the old functions and cannot be isolated so thoroughly.
With regard to staging environment, it can be used as a backup of upstream on nginx, so as not to waste resources. However, with docker, the staging environment can be enabled on demand and deployed only before new features are available. After publishing, the staging environment can be removed so as not to waste resources.
The production environment should be able to release without downtime, or continuous upgrading.