migrating GitLab from "cloud" to self-hosted is as easy as importing the project. You can even import in batch and things will "just work".
https://docs.gitlab.com/ee/user/project/import/gitlab_com.ht...
hosting CI yourself is equally simple. The worker can be installed with few commands, and with a few extra you can configure autoscalling: