1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SFDCのCI/CD対策(その1/2 CI)

Last updated at Posted at 2022-05-12

要件

SalesforceのDeployとソース管理はSalesforce自身の機能でまたできていないです。
Continuous Integration and Continuous DeploymentはSfdcコマンドとAzureのDevopsで実装します。
※おれたちの案は世界一ですよ。

実装イメージ

image.png
・①開発環境から資材を取得する。初期の場合、時間をかけて、初期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で、コマンドパレットを開いてそこから実行ください
    image.png
・初期化

sfdx force:project:create -n .

⓪−2 git環境の構築

  ・作業フォルダーはプロジェクトの直下にする
  ・gitリポジトリ初期化
    git init
  ・Azure上のリモートリポジトリと繋げる
   アカウント設定:(AzureのReposで自分の情報を確認)
    image.png

   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を選択し、シェルで操作する
   image.png

   .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
    image.png

① 開発中資材(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することを紹介いたします。

   

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?