I use Gitea and a Runner to build Docker images from the projects in the git repo. Since I’m lazy and only have one machine, I just run the runner on the target machine and mount the docker socket.
BTW: If you manage to “litter your system with docker related files” you fundamentally mis-used Docker. That’s exactly what Docker is supposed to prevent.