Invest time in GH actions, they are actually really good once you get over the initial hump.
Video: https://www.youtube.com/watch?v=l5705U8s_nQ
Docs: https://docs.gitlab.com/ee/ci/quick_start/
Slides and a demo exercise: https://gitlab.com/gitlab-de/swiss-meetup-2021-jan
We're currently using GitLab's CI/CD for ~50 or so private repositories, covering ~7 different languages without any issues. That includes testing, Docker builds and documentation generation for most projects.
We only use private runners though, I don't know if any issues are related to their own runners.