Как собрать связку nginx, front, back с помощью docker-compose?
А в чем собственно проблема?

Gitlab CI/CD загружает новую версию репозитория - в  ./local-back или ./local-front, и дергает перезапуск docker-compose

docker-compose.yml который лежит в папке выше имеет примерно такой вид:

nginx:
   ...
   volumes:
   - ./local-back:/container/back
   - ./local-front:/container/front
  ...

back:
  ...
  volumes:
  -./local-back:/container/back
  command: тут скрипт который конфигурит бэк и запускает его

front:
  ...
  volumes:
  -./local-front:/container/front
  command: тут скрипт который конфигурит фронт, собирает статику, или что он там делает..

nginx видит бэк как back - соотвественно адресует запросы ему, видит и папку с бэком чтобы брать файлы оттуда при необходимости (загружаемое медиа и пр.)
nginx также видит папку с фронтом откуда берет статику и прочее
Проект с беком ничего не знает про nginx.
Он и не должен вроде? Только фронту нужен URL  backend?

Насчет основного вопроса: я не работал с Gitlab CI, но в Jenkins я бы просто брал код из разных репо, строил images и запускал в docker-compose. Вроде этого:
https://stackoverflow.com/questions/59712578/multi...