Continuous Integration & Continuous Delivery
Continuous Integration
- Automation for entire application lifecycle.
- Allows you to detect issues & bugs early on in development lifecycle
- It takes more time for issues to resolved when they are detected too late
- Re-testing needs to be carried out.
- Solution:
- Run tests as soon as developer makes a commit to repository
- Based on a schedule that runs e.g. every day
- E.g.
- Commit -> Version control –triggers–> build —triggers–> deployed to a test environment –triggers–> test cases are automated –triggered–> final results -> build is marked as success or failure
- Tools are important e.g. Jenkins, Atlassian Bamboo, TeamCity, Azure Pipelines
- Multi-configuration builds
- e.g. build app for both debug and release configurations on both x86 and x64 platforms.
Continuous Delivery
- Compliments your continuous integration process.
- Automates deployment of your changes after build.
- Feature Flags
- Allows you to separate your functional release from your technical release
- Decide to have a feature on runtime; enable/disable a feature based on a boolean
- Deployment rings
- Gradually deploying and validating changes in production
- Impact (also called blast radius), is evaluated through observation, testing, analysis of telemetry, and user feedback
- E.g.:
- Canaries who voluntarily test bleeding edge features as soon as they are available.
- Early adopters who voluntarily preview releases, considered more refined than the canary bits.
- Users who consume the products, after passing through canaries and early adopters.
- Track of your release process quality
- Visualizations about the quality of all the releases pipeline. e.g. adding a dashboard widget which shows the status of every release.
- Release Notes, functional and technical documentation
- Generate Release Notes Build Task (VSTS)
- WIKI Updater Tasks (VSTS)
- 💡 Treat release documentation & manuals as source-code
- When the product changes, the documentation needs to change as well
- Multi-configuration deployments
- e.g. for different geographic regions.
Web App Deployment
- Deployment slots
- Allows you to create a new deployment for the web app.
- ❗ Requires Standard or higher plan to be able to use deployment slots.
- App content and configurations elements can be swapped between two deployment slots, including the production slot.
- Use-cases:
- Create staging environment easily in Web Apps
- Validate in staging before swapping to production
- You can apply Blue Green deployments
- Zero downtime deployment with a auto swap
- Allows you to ensure that all instances of the slot are warmed up before being swapped into production
- Click on slot => App settings => Auto swap: on