I understand this. My way was that the CI pushes via rsync to the server.
This makes more sense for me, because the site has a lot of binary files (mostly images), so I don't want to have another big repo which just consumes resources.
But your approach is also interesting. With your way, the CI doesn't need access to the server.