Да, конечно - вполне можно вполне собирать на месте, а потом заливать готовое.
Та метода, что вам не нравится - просто выделяет процедуру сборку в отдельный,
не зависящий от разработчика, что запускает это вручную.
Полезно, когда разработчиков много или когда весь процесс автоматизирован - четко выделены этапы, можно легко повторить.
Первопричина - в уникальности среды конкретного разработчика. У другого разработчика или на боевом сервере - могут быть другие наборы установленного ПО, другие версии, по-другому сконфигурировано. И даже уже подготовленный и собранный вами готовый "артефакт" может попросту не запуститься.
Когда вы работаете в одного или принципиально программируете в такой же точно среде как и на сервере - в этом нет особой проблемы.
А что если во время сборки на сервере что-нибудь пойдет не так и приложение не соберется, а это все в продакшене?
Да, да.
Метода с выделением процесса сборки более громоздка (в частности, нужно обеспечить уведомления при сбое сборки/чтение логов сборщика). И далеко не всегда целесообразна. Но более удобна для бОльших проектов. Где разработчик может не быть в состоянии отслеживать каждую сборку индивидуально.
Хорошо настроенная система просто не выкатит код в production, если "пошло что то не так на сервере". Но ее еще нужно настроить.