As a matter of fact I went through the trouble to set up 10.9 through 10.14 in VirtualBox, driven by gitlab-runner via the virtualbox executor[0] (which is pure genius: it uses linked VM clones from a reference VM to spawn parallel runners, as well as using snapshots once SSH is ready after first boot for <2s spawn + full state reset).
Given the painful macOS on VirtualBox situation, at the time I wanted to move to VMware Fusion[1] but lacked time to implement an executor. It seems someone took that in their own hands and implemented a specific runner (in Swift!).