У нас используется для Wordpress CI/CD внутреннее самописное решение на bash, с постепенным переходом на ansible.
.gitlab-ci.yml в проекте выглядит примерно так:
stages:
- test
- demo
- prod
variables:
GIT_STRATEGY: none
test_stage:
stage: test
only: [test]
tags: [test]
script: deploy-wordpress-site
demo_stage:
stage: demo
only: [demo]
tags: [demo]
script: deploy-wordpress-site
prod_stage:
stage: prod
tags: [prod]
only: [prod]
script: deploy-wordpress-site
Плюс на dev-серверах есть пара скриптов, которыми разработчики фиксируют состояние базы для коммита и деплоя.
Главный камень преткновения - если на production добавляются данные в базу и файлы на диск, важно не затереть их деплоем.