要件
SalesforceのDeployとソース管理はSalesforce自身の機能でまたできていないです。
Continuous Integration and Continuous DeploymentはSfdcコマンドとAzureのDevopsで実装します。
※おれたちの案は世界一ですよ。
実装イメージ
・①開発環境から資材を取得する。初期の場合、時間をかけて、初期package.xmlを作成する。
・②デプロイ用ブランチ(dev01)と開発済み資材ブランチ(一時ブランチ tmp-dev01)の差分をとり、開発した資材のリストはpkdiff.xmlを格納。
不要なソース(開発で変更しない標準オブジェクト等)は.gitignoreに追記し、管理対象としない。
・③改修内容(PBI/タスク)をコミットコメントに設定し、dev01にコミット。
一時ブランチを削除
AzureへPushする
・④Pipelineで自動的にデプロイを実施
sfdx force:resouce:deploy xxx.xml -u ターゲット環境
⓪ 事前準備
Vscodeとsfdxのインストール
https://www.escortia.net/s/article/visual-studio-code-salesforce-MCETGZ7ONG25AKRHSVN2NQCAMMDY
Gitのインストール
https://www.atlassian.com/ja/git/tutorials/install-git
Azureの無料アカウント(Version管理のReposを作成する 例:dev01)
https://azure.microsoft.com/
⓪ー1プロジェクトを作成
プロジェクト名:dev01env(例)
実行:
・VscodeのTerminalを開き、作業用フォルダで下記コマンドを実行し、sfdxプロジェクトフォルダ(+デフォルト資材)を作成する
・code dev01env を実行し、作成したsfdxプロジェクトフォルダを開く
※実行できない場合、Shift+Control+Pで、コマンドパレットを開いてそこから実行ください
・初期化
sfdx force:project:create -n .
⓪−2 git環境の構築
・作業フォルダーはプロジェクトの直下にする
・gitリポジトリ初期化
git init
・Azure上のリモートリポジトリと繋げる
アカウント設定:(AzureのReposで自分の情報を確認)
git config --global user.name "hu.chunqiang"
git config --global user.email "xxxx"
git config --global user.password "xxxxx"
git config --global core.quotepath false ※漢字の文字化け対応
git remote add origin https://XXX-Services-Pj@dev.azure.com/XXXXX/_git/XXXX
git pull origin dev01 ※Azureのdev01がロカールへチェックアウト
・確認
git config --global -l
git branch -a
・VscodeのTerminalにBashを選択し、シェルで操作する
.gitignoreが矛盾の場合、ロカールのものを削除する
rm .gitignore
git checkout -b dev01 origin/dev01 ※ローカルBranch
⓪−3 Sandboxと繋ぐ
・ログイン設定
sfdx force:auth:web:login -r https://test.salesforce.com -a sd-dev01 -s
※ -a 別名 -s DefaultUserOrg
sfdx force:config:set defaultusername=sd-dev01 ※Default指定
確認
sfdx force:org:list
① 開発中資材(Sandbox資材)をローカルにダウンロードする
①ー1 初期準備 Package.xmlの作成と整理
最初のPackage.xmlを自動的にSandboxから作成する
mkdir manifest
sfdx force:source:manifest:create --fromorg sd-dev01 --manifestname ./manifest/pack-dev01.xml
※開発環境sd-dev01のソースは全部リストされましたが、標準のモジュールが多いので基本的に管理したいものがすくないです。不要なものはpackage.xmlから削除する。
①ー2 管理ソースはローカルへダウロード
・初回の場合
sfdx force:source:retrieve --manifest ./manifest/package.xml
・初回以外は、管理モジュールが明確になるので、指定してダウロードする
例: //Apexクラス
sfdx force:source:retrieve -m ApexClass -u sand1
//Lightning Auraコンポーネント
sfdx force:source:retrieve -m AuraDefinitionBundle -u sand1
//Lightning Webコンポーネント
sfdx force:source:retrieve -m LightningComponentBundle -u san1
// CustomObject
sfdx force:source:retrieve -m CustomObject -u sand1
// standard Object
sfdx force:source:retrieve -m CustomObject:Account -u sand1
// flow
sfdx force:source:retrieve -m Flow:yourflowName -u sand1
// ApexPage
sfdx force:source:retrieve -m ApexPage -u sand1
確認 ソースはforce-app/main/defaultにダウロードされる
② 開発した資材の差分XMLを抽出する
②−1 一時ブランチと開発資材用ブランチで差分を取る
・実行
git checkout -b tmp-dev01 →今のdev01から、ブランチを新規
git add force-app →フォルダーforce-appの下ものは全部臨時ブランチに追加
git commit -m "XXXX" →コミットする(-m オプションの値としてコミットコメントを設定。修正内容(PBI/タスク名など)を入力する)
sfdx force:source:manifest:create --sourcepath \`git diff dev01 tmp-dev01 --name-only --diff-filter=MRA| awk '{printf ","$1;} \'` --manifestname ./manifest/history/pkdiffxxxx.xml
2022/06/22 追記 追加差分のみにする。--diff-filter=MRAを追加、M−修正、R−名前変更、A−追加
削除部分を作成する(D−削除、R−名前変更の元).操作前に修正元ブランチをチェックアウトする。
sfdx force:source:manifest:create --sourcepath `git diff fix/del5851-2 fix/del5851 --name-only --diff-filter=R | awk '{printf ","$1;} '; git diff fix/del5851 fix/del5851-2 --name-only --diff-filter=D | awk '{printf ","$1;} '` -t post
プロジェクトの直下に作成されるので、manifestへ移動する。mv destructiveChangesPost.xml manifest/.
※差分xmlのネーミングルール:固定「pkdiff」+タスク番号
②‐2 以下のコマンドでデプロイ検証を行う※問題ある場合、解決した上で再度検証を行う
fdx force:source:deploy -c --manifest manifest/history/pkdiff5851.xml --postdestructivechanges manifest/destructiveChangesPost.xml -u sd-dev01 -g
※ -c 検証 -u ターゲット環境 -g ワーニングを無視
アンコミットのコマンド:
git reset --soft HEAD^ →UnCommit
git reset HEAD xxxx/xxx/file → git addから外す
②‐3 下記のコマンドで差分package.xmlをpkdiff.xmlに上書きする
cp manifest/history/pkdiff5086_sample.xml manifest/pkdiff.xml
pkdiff.xmlに新規されたモジュールはpackage.xmlに手で追加してください。
(差分Deployはpkdiff.xmlを使う。新規環境の場合、package.xmlを使う)
最後、追加済かは下記コマンドで検証する
grep manifest/pkdiff.xml -v -f manifest/package.xml | wc -l
git add .
git commit -m "xxxxx"
②ー4 コミットした資源をAzure上のリモートリポジトリに反映する
git push -u origin tmp-dev01
※ローカルのブランチを削除
git branch --delete fix/5086
まとめ
コマンドだけでソースのVersion管理とリリースはできて、画面操作より正確だし、はやいです。
次はAzureでソースが更新されると、自動的にDeployすることを紹介いたします。