Correctly Using Build, Test, and Deploy Stages and Artifacts to run Tests on the Build Stage

I’m setting up our CI pipeline with a typical Build, Test, Deploy structure, and I’m stuck on how I’m approaching these stages. I would expect that when we “Build” it will run through the steps to build the code base (as defined in the gitlab-ci.yml file), then do the same for Testing and Deploying. The issue is that my Test and Deploy stages rely on the things we built back in the Build stage, and as we all know, these things do no persist between stages unless they are defined as artifacts. No matter, I can define these artifacts, but I often fail for an artifact being too big (11 MB in this last case). I know there is a setting to up the allowed artifact size, but I’m beginning to wonder if I’m just approaching this all wrong. Does anyone know the happy path here?