Как указали выше можно использовать Jenkins. В свое время немного использовали его, но в итоге пришли к встроенному Gitlab CI.
Устанавливать Gitlab CI отдельно не нужно, он идет в комплекте с самим Gitlab. Дополнительно нужно будет установить runner - один или несколько, в зависимости от поставленных целей (например, для простого деплоя может вполне хватить одного SSH-раннера).
В блоге у них есть статьи на эту тему, которые в общих чертах показывают суть процесса:
https://about.gitlab.com/2016/08/26/ci-deployment-...
https://about.gitlab.com/2016/08/05/continuous-int...