Salesforce неуклонно движется к тому, чтобы разработчики могли безболезненно начать работать с CI/CD, используя SF. Давайте же посмотрим, как это происходит. Пройдем через весь цикл создания и настройки ScratchOrg. Чтобы лучше понять процесс, будем работать только с CLI.
1. Необходимое для начала работы с ScratchOrg
2. Создание проекта
3. Создание ScratchOrg
4. Удаление ScratchOrg
5. Получение метаданных
6. Push changes to Scratch and DevHub
7. Pemission Set Assigment
8. Import/Export of data
9. Заключение
Необходимое для начала работы с ScratchOrg
-
Установленное VSC и Salesforce CLI (command-line interface). Пошаговый туториал тут.
-
Developer org, без включенного префикса, иначе ничего не выйдет. Нужно перейти в Setup > DevHub > Enable.
Создание проекта
После того как установлен SF CLI, вызывать команды можно находясь в любом разделе - как через VSC терминал, так и через Git Shell.
Команда, которая создаст проект с базовой структурой
Команда: sfdx force:project:create -n HelloScratch
После ввода команды в терминале VSC, был создан проект. Теперь стоит обратить внимание на некоторые файлы.
(1) - в этом файле будут определяться параметры для будущей ScratchOrg. К нему мы ещё вернёмся
Если выполнить эту же команды из Git Shell, то получите такой же результат.
Создание ScratchOrg
Dev Hub
Перед тем как создать ScratchOrg, необходимо подключиться к основной организации, она носит название DevHub. Она будет управлять всеми ScratchOrg, относящимся к ней.
- Login to DevHub
Команда:sfdx force:auth:web:login -d -a DevHub
Для sandbox используем
Команда:sfdx force:auth:web:login --setalias vscodeOrg --instanceurl https://test.salesforce.com/ --setdefaultusername
-d - указывает, что это будет основанная DevHub организация при создании ScratchOrg
-a - alias для DevHub
Вызываем команду, вводим логин и пароль в окне браузера.
Теперь, если ввести команду: sfdx force:org:list
Будет показан список подключенных организаций и список ScratchOrg(которых пока что нет).
Если подключенных организаций несколько, то напротив основной будет стоять (D)
Теперь создадим ScratchOrg.
ScratchOrg
ScratchOrg может быть создана пустой, с базовыми настройками, которые вы видите в файле project-scratch-def.json
Но настройки будущей организации всегда можно изменить.
- Команда, которая создаст оргу, основываясь на вышеупомянутом файле.
sfdx force:org:create -s -f HelloScratch/config/project-scratch-def.json -a "HelloSO"
Теперь при вводе команды: sfdx force:org:list
Можно увидеть организацию, которую вы создали
Можете открыть её, и осмотреться, введите команду:
sfdx force:org:open -u HelloSO
Где HelloSO, это ALIAS вашей организации.
или
sfdx force:org:open -u USERNAME
USERNAME - имя юзера для вашей организации.
P.S Данные о ScratchOrg и токены хранятся на локальной машине. Поэтому создав ScratchOrg, на одной машине и вдруг оказавшись за другим устройством, вы хоть и сможете зайти на DevHub и даже увидеть все свои ScratchOrg в интерфейсе, но из CLI доступа у вас к ним не будет.
Удаление ScratchOrg
Иногда случается так, что в ScratchOrg исчезает необходимость - тогда её можно удалить
командой: sfdx force:org:delete -u HelloSO
Либо через интерфейс вашей основной организации, перейдя в раздел Active Scratch Org.
Кстати, если вы удаляете организацию и достигли лимита, то это не значит что вместо неё сможете сразу создать новую: использованный лимит на создание организаций остаётся прежним.
Получение метаданных
На моей основной организации DevHub существует ApexClass HelloScratch. Пусть ScratchOrg HelloSO и привязана к DevHub, но метаданные ещё потребуется вытянуть.
Поэтому, сейчас мы стянем все классы, что имеются на DevHub на нашу локальную машину, а после отправим их на нашу Scratch Org.
Команда: sfdx force:source:retrieve -m ApexClass -u DevHub
После чего можно заметить, как в проекте появился новый класс.
На скретч организации, этих данных пока-что нет.
Push changes to Scratch and DevHub
Наиболее простой способ сохранить данные на scratchOrg - это
команда: sfdx force:source:push
Она отправит локальные компоненты на ScratchOrg. Salesforce DX следит за тем что было изменено между локальным хранилищем и скретч организацией.
В идеале, на DevHub метаданные должны заливаться только если все тесты прошли, а команда заапрувила pull request, так как в это статье мы только знакомимся с SFDX, то уж простите, зальём всё сразу на DevHub.
- Перед этим понадобиться конвертировать необходимые метаданные.
Команда: sfdx force:source:convert -r YOURPATH\classes -d deploy
-r - то что вы конвертируете
-d - папка, куда будут сохранены конвертированные данные
После этого у вас в проекте в указанном месте появится папка с “конвертированными” данными.
- Теперь можно деплоить
Команда:sfdx force:mdapi:deploy -d YOURPATH\deploy -u DevHub -w 3
В результате, после сообщения об успешном деплое, можете проверить на вашей организации, что все данные перенесены.
P.S По сути, вся эта конвертация - всего лишь генерация package.xml файла. Если попробуете добавить его в папку с классами и запустить команду для деплоя, указав новый путь, то получите точно такой же результат.
Pemission Set Assigment
Перед тем как начать работу с данными, потребуется назначить Permission Set.
-
Перейдите на ScratchOrg,
sfdx force:org:open -u HelloSO
-
Создайте Permission Set, настройте его так, что-бы вы имели доступ к изменению записей.
-
Затяните этот Pemission Set к себе в локальный проект.
Команда:sfdx force:source:pull -u test-kwpkodrzs31a@example.com
-
Теперь его нужно назначить пользователю, по USERNAME. Admin - имя PS который я создал.
Команда:sfdx force:user:permset:assign --permsetname Admin --targetusername test-kwpkodrzs31a@example.com
Теперь у нас есть больше возможностей
Import/Export of data
Для более удобного тестирования функционала, необходимо иметь набор записей, который был бы приближён к реальным условиям. К тем, что будут происходить на продакшене.
Записи с продакшена никто, естественно вам не предоставит, это было бы очень безответственно. Поэтому существуют заготовки, в виде json файлов. Которые помогут быстро наполнить вашу ScratchOrg данными.
Export Data
-
Для начала, переключимся на DevHub, ведь сейчас все команды что мы выполняем направлены на ScratchOrg.
Команда:sfdx force:config:set defaultusername=bogomaz@sparkybit.com
Эта команда, по USERNAME для DevHub организации сделает её организацией по умолчанию. Теперь она принимает все наши команды. -
Запросим данные для Account.
Команда:sfdx force:data:soql:query --query "SELECT Id, Name FROM Account"
-
Если выданный результат, это как раз то, что нужно, то теперь упакуем это в json.
Команда:sfdx force:data:tree:export --query "SELECT Id, Name FROM Account" --prefix Accounts --outputdir MockData --plan
В результате будет создано два файла:
Import Data
Перенесём же эти данные в ScratchOrg.
-
Переключимся обратно на ScratchOrg
Команда:sfdx force:config:set defaultusername=test-kwpkodrzs31a@example.com
-
Импорт ранее полученных данных
Команда:sfdx force:data:tree:import --plan YOURPATH\MockData\Accounts-Account-plan.json
Готово! Если перейти на ScratchOrg, то найдёте там созданные аккаунты.
Заключение
Во всём этом сильно не хватает хорошо настроенного CI, ведь ради этого и был задуман Salesforce DX. Чтобы оптимизировать процесс разработки. В следующей теме рассмотрим как начать работать с Salesforce DX и Git.
Если у вас остались вопросы - задавайте в комментариях!