If a Stg Deployment uses a different Package as Production does, can it really be called "Staging"? Isn't it at this point another "System Integration"?
The setup is the following:
- Pileline: Dev > CI > Stg > Prod
- Application: A MultiConfiguration Project (say C# Mvc)
- Dev >> Dev DB
- CI/QA >> CI DB
- "Staging" >> Stg DB
- Production >> Prod DB
- Stack: AWS CloudFormation Template
- ELB with N EC2 Hosting the
- RDS Hosting the DB
Aspects we are interested to test:
- IAM Security Roles
- SecurityGroup: Even if both were created with the same template, but are different entities (and can be manually edited separately), is it really "staging"?
- CodeDeploy: If it uses a different Revision, is it really "staging"?
- EC2 >> RDS connectivity: If it's a different DNS, is it really "staging"?
- New App to current DB
- SSL certificates
This question is more philosophical than anything else.
In a Blue/Green deployment, you deploy to blue, and if it's good enough, then you promote it to green by swapping them.
But in a Staging/Prod deployment, the idea is that the artifact being pushed will work the same way as in production, reducing to almost 0 of any non-forseen environment issues. Kinda of pushing to "blue" and then to "green" w/o the swap.
But if the "staging" environment is a full "clone" of the environment, than your risk rises as any ephimeral discrepancy might affect your release.
Without this, the "Staging" environment becomes yet another "SI" environment, leaving you w/o a proper 'stg/prod' or 'blue/green prod' deployment strategy.