I agree that the question is a bit broad but here but generally speaking you should ave a different CI pipeline for your frontend and backend application.
The implications of this are many since this will allow you to:
- To use different release cycles for your backend/frontend application
- Reduced build time
You might however at some point run an integration step to make sure everything holds together. Generally speaking your pipeline should look like (this should run on every commit):
Also make sure you choose a CI/CD tool that doesn't get in your way and that's flexible enough (i.e: GitLab, Jenkins).
- Build docker image
- Linter (to ensure a minimum code formatting and quality)
- Unit Testing
- Code coverage (Code coverage perse it's a bit useless but combined with how it evolves and enforcing a minimum % might help with quality)
- Functional testing (this makes more sense for your backend stack if it uses a database for instance ...)
- If everything passes then push to DockerHub
- Deploy the recently built image to the corresponding environment. Example merging to develop implies deployment to your staging environment