Как вы знаете, при DevOps - CI/CD подходе метадата грузится в Прод (или в При-прод) из соответствующей ветки в VCS, и менеджеры думают, что одно из преимуществ такого подхода - это наличие некой кнопка "Вернуть все как было", т.е. в случае деплоя в стиле "Наташа, мы все сломали", то можно нажать на эту кнопку и все в Проде вернется, как было до деплоя.
Но правда ли это?
На уровне VCS - да, можно так или иначе сделать roll-back, и ветка вернется к прежнему state, но поможет ли это вернуть "все как было" в самом Орге? Что если плохой деплой включал создание новых классов, новых объектов? Если сделать roll-back на ветке и потом попробовать деплойнуть ее, то что с ними будет? во многих случаях без их удаления и вернуться ко "все как было" не получится, так как там все зависимости-зависимости...
Абсолютная правда. При внедрении CI все только про авто деплой и авто откат и думают. НО на своей практике никогда не видел чтобы автооткат использовался. И как раз по этой самой причине - что нихрена нормально не откатится даже уже на этапе прогнозирования. Поэтому если что-то сломалось, просто делается новый следующий коммит который просто дизейблит/комитит/фиксит неудавшуюся часть кода. То есть движение всегда только вперед, никогда назад!!!!
авто отката в сэйлсфорсе нет. может люди не из сэйлсфорс бэкграунда так думают. некоторые настройки и фичи вообще никак нельзя отключить после включения в продакшене
произойдет следующее : так то если изменения в xml file, тот же например workflow или field задеплоишь, потом передумаешь и решишь откатить то деплой пустого workflow файла, или отсутствия поля и т.д. ни к чему не приведет, даже деплой пустого workflow файла не удаляет (и никак не меняет) уже задеплоенные workflow на этом же обьекте в проде В СФ чтобы откатить надо отдельно откатывать версии (типа изменения существующего класса) и отдельно откатывать полностью новые изменения типа нового поля. Для этого создается destructive.xml и туда вписывается что удалять, т.е. чтобы откатить надо проделать работу и не малую.
Особенно если например был деплой, мы накатили изменения в схеме, новые поля, новые lwc и новый apex. потом задеплоили destructive и почистили/поудаляли старые поля на которые ссылался старый код который был изменен в релизе. И потом оно не работает. Ну вот это все задолбешься откатывать. Физически это возможно (в несколько деплоев, в 1 невозможно) но на практике так никто не делает и как сказал Дима просто движемся вперед.
вообще по нормальному создается кастом метадата с feature flag и у новых фичей создается флаг для выключения если мега баг. Старый функционал сломанный чинится в срочном порядке. Всё а да CI/CD всяко надо иметь
К сожалению, я так грааля и не нашел в этом вопросе. Могу лишь посоветовать что-то в этом вопросе
1. Весь custom development должен быть упакован в unmanaged package 2. Это должен быть second generation package. И да из него можно удалять метадату 3. Пакет ставить нужно сначала ТОЛЬКО на sandbox
Хочу подчеркнуть данный пункт и добавить - делать managed package ТОЛЬКО в случае крайней необходимости. Реальный пример последнего клиента - изначально сделали managed package при том что кастомизация исключительно "для себя". но потом новый функционал начали делать как unmanaged code. Разработка между первым и вторым как небо и земля. Теперь стоит вопрос как избавиться от пакета и сделать все unmanaged. Я честно признаюсь тоже раньше не придавал этому значения и для меня что пилить managed что unmanaged code было равнозначным, но благодаря этому клиенту для себя открыл эту мудрость. Может кому пригодится на будущее. Но готов также выслушать аргументы против
От млин! Я тупой!!! Совсем забыл про Deleted Fields В классике они лежали внизу списка и мозолили глаза, а в Lightning вынесены на отдельную страницу. Совсем забыл что удаление поля двухступенчатая процедура