I wrote the following relevant article:
https://medium.com/gooddata-developers/extending-ci-cd-data-pipeline-with-meltano-7de3bce74f57
It is still a naive demo but shows the way.
The scheduling is done in Gitlab but should be done e.g. by Dagster or Airflow. I plan to extend the pipeline accordingly in near future.
The ultimate solution is to deploy all components to Kubernetes or as serverless functions. I would like to end up the demo like this. It still will be orchestrated by Gitlab, but instead of running Meltano/dbt/... in Gitlab workers, Gitlab will deploy artifacts to k8s/serverless.
Anyway, the Gitlab CICD way is IMO correct and it is very easy to set up.