How to avoid wasting time/resources in a CI/CD workflow?
We break ours down into stages, and each stage pulls, rather than pushes. 

Our build takes 20 minutes. So if I commit once a minute, I will still only get three builds an hour, but each build will contain 20 commits. 

The tests then pull on the latest successful builds and run them, and the same for the deployment scripts.

The main point is that we do NOT build every commit individually. We do NOT test every build individually. 

I probably got all this from Continuous Delivery by Jez Humble and David Farley.