I have been working on a project of migrating Atlassian suites (Confluence/Jira/…) to AWS. This is not a simple lift and shift migration. We actually redesigned everything from ground up. Here is the CICD that I designed. The source codes are stored in on-premise BitBucket, the build tools is AWS Dev Tools (mainly CodeBuild).
Development Phase (DEV)
- Raise a Jira ticket for a bug-fixing or new feature task, and create a branch from master for this ticket. (e.g feature/jira-1234-stack-building-pipeline)
- Commit your changes to the above branch when you are ready to test your codes. Then release your codes to DEV deploy bucket from your laptop.
- Raise a PR (Pull Request) for peer review your work once you are happy with your codes. Your branch will be merged into master if the PR is approved by the reviewers. Sometimes you need to fix issues in your codes that are detected by the reviewers before it can be merged.
Integration Test Phase (DEV)
- Data-Provider syncs the latest data from PROD environment to a S3 bucket, then Data-Refresher syncs the data from the S3 bucket to DEV environment, and updates the environment settings (e.g site name, application-links, theme color).
- Code-Releaser pulls the latest codes from master branch, and uploads them into DEV deploy bucket.
- Cold-Deployer updates all application stacks with the latest codes from the DEV deploy bucket.
- App-Tester tests the functions of the newly deployed applications in DEV account.
UAT and Performance Test Phase (UAT)
- Pass COMMIT_ID of the successful integration test to Code-Releaser in UAT account. It will release the specific commit into UAT deploy bucket.
- Run Cold-Deployer or Hot-Deployer to deploy the latest codes into UAT environment.
- Run App-Tester and Perf-Tester
- Invite users for UAT tests.
Go Live Phase (PROD)
- Pass COMMIT_ID of the successufl UAT and Performance test to Code-Releaser in PROD account. It will relesae the specific commit into PROD deploy acount.
- Run Cold-Deployer or Hot-Deployer to deploy the latest codes into PROD environment.
- Run some smoke tests.