Работиш по проект. По принцип имате няколко staging сървъра, да речем за примера UAT и Production.
Когато работиш по този проект, ти по принцип работиш локално, което се води development environment.
Естествено, когато оправяш нещо, не го оправяш директно на Production сървъра. Просто не е желателно, да не кажа забранено.
Deployment е процеса, в който искаш обновниш някой от сървърите с последните ъпдейти, които ти и тима ти сте направили.
Това се прави посредством deployer.
Deployer-a e софтуер, който настройваш да комуникира със сървърите, които имате налични, както и с кода(принципно github repository). Той е отговорен да вземе последните промени и да ги качи на сървъра, който си му казал. В света на PHP принципно е това, както и може да прави определени конфигурации, ако е нужно, да билдва CSS и JS assets и т.н.
Удобството на деплойъра е, че не е нужно ръчно всеки път да ходиш по сървърите (чрез SSH) и да правиш всичко това ръчно. Просто го конфигурираш какво искаш да прави и ще го направи на всички сървъри еднакво. Това е особено полезно, ако имаш няколко production сървъра, които се управляват с load balancer и искаш по един и същи начин всичко да се изпълни. Така няма да се притесняваш, че си забравил нещо да изпълниш на някой от сървърите, по време на release.
Друго полезно е, че deployer-a може да си прави архиви на предходни release-и и в случай, че нещо с новия се обърка, винаги можеш да rollback-неш до предния стабилен, за да може потребителите да продължат да използват уеб сайта(или каквото е там).
Ако правиш всичко това ръчно всеки път, когато правиш release, представи си колко време ще ти отнема, дори да трябва да го качиш на тестовия сървър(UAT).
Не се сещам за минуси. Минус може да е просто деплойъра, който ползвате. Ние на работа ползваме Capistrano, който е писан на Ruby, а аз чисто и просто не харесвам руби като език.
Надявам се, че отговора ми е задоволителен.