要件
SalesforceのDeployとソース管理はSalesforce自身の機能でまたできていないです。
Continuous Integration and Continuous DeploymentはSfdcコマンドとAzureのDevopsで実装します。
※おれたちの案は世界一ですよ。
実装イメージ
④ 自動配布
CI/CDの一つ核心はバージョン管理、もう一つは自動配布です。
自動配布機能はないと、CDにならないです。
①‐③までの説明
- SFDCのCI/CD対策(その1/2 CI)を参考してください
本節の参照資料は下記です。
- 参考資料:https://abhisheksubbu.github.io/salesforce-azure-devops/
④‐1 salesforce環境接続用キー作成
普通のSFDCへの認証は画面にID、Passwordで行いますが、自動配布になるとこれは実用できないです。
認証方式はJWTになります。認証証明書が必要です。そのため、自分で認証キーと証明書を作成します。
- salesforce環境とAzure Devops Repo接続用認証ファイル作成:
-
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out server.key
でプライベートキーserver.key作成 -
openssl req -new -key server.key -out server.csr
プライベートキーでserver.csrを作成 -
openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
認証証書server.crtを作成
-
④‐2 salesforce環境接続用アプリケーション作成
Salesforce側に④‐1の証明書を使って、外から認証を受ける接続アプリケーションを作成する
-
「OAuth 設定の有効化」をチェック入れ、以下のように設定、その内コールバック URLをhttp://localhost:1717/OauthRedirectに設定、デジタル署名で前に作成した**server.crt**をアップロード
-
作成したアプリケーションの「manage」をクリック、「ポリシーを編集」クリック、「OAuth ポリシー」の「許可されているユーザ」を「管理者が承認したユーザは事前承認済」に設定
-
作成したアプリケーションの「manage」をクリック、「プロファイル」欄で「システム管理者」「API ONLY」のプロファイルを追加
④‐3 azure pipeline作成
上記④‐1、④‐2で作成した認証情報を利用して、自動配布のPipelineを作成する。
-
salesforce環境にdeployしたいazure repoのブランチに、前に作成したserver.keyをアップロード
-
pipelineコード保存後、右上「run」をクリックにより、pipelineの手動起動ができます。
コード説明 azure-pipelines-dev01.yml(STS-Team-Business-Sys-dev01-test01)
用途:dev01ブランチ内容が更新されるとき、資材をft01環境へdeploy
- pipeline起動条件をdev01ブランチ内容更新される場合に設定、且つ頻繁操作有りの場合batch実行行い、起動回数を減らす。
trigger:
batch: true
branches:
include:
- dev01
- pipelineプラットフォームをMicrosoftでホストされているLinuxマシンに設定(デフォルト)
pool:
vmImage: ubuntu-latest
- プラットフォームにSFDX CLIをインストール
- bash: npm install sfdx-cli --global
displayName: Install Salesforce CLI
- sfdx-cliのバージョン確認(pipelineに影響無し)
- bash: sfdx --version
displayName: Show Salesforce CLI Version
- SFDXプロジェクを作成
- bash: sfdx force:project:create -n .
displayName: Create a salesforce Project
- salesforce sandbox ft01環境に接続、四つのパラメータを渡す:
- $(SALESFORCEDEVORGCLIENTID)、前に作成した salesforce環境接続アプリケーションの「コンシューマ鍵」を入力
- $(SALESFORCEJWTKEYFILEPATH)、sandboxを接続の場合https://test.salesforce.comを入力、本番環境を接続の場合https://login.salesforce.comを入力
- $(SALESFORCEDEVORGUSERNAME)、接続先環境の「システム管理者」プロファイルを持つ「ユーザ名」を入力
- $(SALESFORCEDEVORGINSTANCEURL)、前にazure repoのブランチにアップロードしたserver.keyのファイルpath
- bash: sfdx force:auth:jwt:grant --clientid $(SALESFORCEDEVORGCLIENTID) --jwtkeyfile $(SALESFORCEJWTKEYFILEPATH) --username $(SALESFORCEDEVORGUSERNAME) --instanceurl $(SALESFORCEDEVORGINSTANCEURL) -a DepolyOrg
displayName: Authorize salesforce org
- 本番deployの前に、資材deploy出来るが如何かの検証;一つのパラメータを渡す:
- $(deploy_from_pkdiff.xml):pkdiff.xml中の資材をdeploy、毎回修正された資材のみ含まれる
- $(deploy_from_package.xml):package.xml中の資材をdeploy、新しい環境作成ため全ての資材が含まれる 参考資料:デプロイ手順
- bash: sfdx force:source:deploy -c --manifest manifest/$(deploy_from_pkdiff.xml) -u DepolyOrg
displayName: Deploy test OK
- 本番deploy
- bash: sfdx force:source:deploy --manifest manifest/$(deploy_from_pkdiff.xml) -u DepolyOrg
displayName: Deploy "manifest/$(deploy_from_pkdiff.xml)" to Sandbox DepolyOrg
pipelineの各ステップ、その内 「DisplayName:」を使用して、pipeline実行のlogでステップを表示できます
④‐4 配布前のValidation(オプション)
コード説明 dev01-check_deployable_on_PR.yaml(STS-Team-Business-Sys check-SFdeploy)
用途:dev01ブランチにpull Request出す時、deploy予定の資材がft01環境へdeploy出来るかどうかを検証、エラーの場合資材の再修正が必要
- pipeline起動条件をdev01ブランチにpull Request出す時場合に設定
trigger:
# 正式なやり方は不明だが、PRのときだけ走らせるため、存在しないブランチ名を指定しておく https://maku.blog/p/i6549xd/
- DUMMY_BRANCH_TO_BUILD_ONLY_ON_PR
pr:
# dev01をターゲットとしたPR時にトリガーする
- dev01
- pipelineプラットフォームをMicrosoftでホストされているLinuxマシンに設定(デフォルト)
pool:
vmImage: ubuntu-latest
- 中身はazure-pipelines-dev01.ymlと同じ、但し本番deployのコードを抜き
steps:
- bash: npm install sfdx-cli --global
displayName: Install Salesforce CLI
- bash: sfdx --version
displayName: Show Salesforce CLI Version
- bash: sfdx force:project:create -n .
displayName: Create a salesforce Project
- bash: sfdx force:auth:jwt:grant --clientid $(SALESFORCEDEVORGCLIENTID) --jwtkeyfile $(SALESFORCEJWTKEYFILEPATH) --username $(SALESFORCEDEVORGUSERNAME) --instanceurl $(SALESFORCEDEVORGINSTANCEURL) -a DepolyOrg
displayName: Authorize salesforce org
- bash: sfdx force:source:deploy -c --manifest manifest/$(deploy_from_pkdiff.xml) -u DepolyOrg
displayName: Checking deployment "manifest/pkdiff.xml" to Sandbox DepolyOrg
###dev01ブランチにこのPipelineを設置