このチュートリアルでは、Salesforce Developer Experience(SFDX)と Cloud Build を使用して、Salesforce 用のサーバーレスな継続的インテグレーション / 継続的デプロイ(CI / CD)パイプラインを構築する方法について説明します。Cloud Build パイプラインでは、コンテナ化が使用されます。パイプラインは、一連のビルドステップとしてビルドを実行します。各ビルドステップは、Docker コンテナで実行されます。パイプラインは、サーバーの事前プロビジョニングを必要とせずに負荷に応じてスケールアップまたはスケールダウンでき、高速で一貫性のある自動ビルドを提供します。
このチュートリアルは、組織内で DevOps ワークフローの設計、開発、メンテナンスを担当するすべての方を対象としています。こうした役割には、アーキテクト、DevOps チーム、エンジニアなどが該当します。このドキュメントでは、セクションが変わると、パイプラインの該当部分に合わせて説明対象の役割も変わります。たとえば、ある部分では、管理者と DevOps リードが対象となり、別の部分では Salesforce 開発者が対象となります。
このドキュメントは、Salesforce DX、Salesforce CLI、Git、GitHub、Docker、Cloud Build などの Google Cloud プロダクト、およびコンテナ化のコンセプトについての知識があることを前提としています。また、GitHub アカウントを持っていることも前提としています。
ソフトウェア開発ライフサイクルにはさまざまなものがあります。このチュートリアルでは、アジャイル リリース手法に従っていることを前提としています。
目標
- Salesforce Developer Experience を設定する。
- Git のブランチ戦略を設定する。
- Cloud Build を構成する。
- Google Cloud のビルドツールと GitHub を使用して Salesforce 用の CI / CD パイプラインを実行する。
費用
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを作成できます。
Salesforce の費用が発生する場合もあります。このチュートリアルでは、Salesforce Developer Edition 組織を使用します。これは無料で使用可能な場合があります。詳細については、Developer Edition に関する Salesforce のページをご覧ください。
準備
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud Build API を有効にします。
-
Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。
- Dev Hub 組織のロールを担える Salesforce アカウントがあることを確認します。組織がない場合は、Salesforce のデベロッパー サイトで Developer Edition アカウントを作成できます。
このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。
アーキテクチャ
次の図は、このチュートリアルで作成する CI / CD ワークフローのアーキテクチャを示しています。このアーキテクチャでは、プロジェクトはリリースとして整理されます。機能に取り組む開発者は、リリース ブランチから新しい機能ブランチを作成します。
この図は次のフローを示しています。
- 開発者は、開発している機能に関して GitHub に機能ブランチを作成します。
- 開発者は、開発作業を完了したら、Salesforce のスクラッチ組織で単体テストを行います。
- 開発者は、開発作業を commit し、ソースコード リポジトリ(このチュートリアルでは GitHub)に push します。
- 開発者は、作業をリリース ブランチにマージする pull リクエストを作成します。
- pull リクエストが作成されると、テストを実行する Cloud Build ジョブが自動的にトリガーされます。
- 担当者(通常はチームリーダー)は、pull リクエストを確認して承認し、開発作業をリリース ブランチにマージします。
- リリース ブランチへのマージにより、コードベースを QA などの Salesforce 環境にデプロイする Cloud Build ジョブが自動的にトリガーされます。
- 必要に応じて、QA 環境で手動のテストとレビューが実施されます。
- 担当者は、コードを
main
ブランチにマージする pull リクエストを作成します。 main
ブランチへの pull リクエストにより、コードを本番環境にデプロイする Cloud Build ジョブがトリガーされます。
プロジェクトに取り組む開発者は、最初にエンタープライズ ソース管理ツール(このチュートリアルでは GitHub)からプロジェクト リポジトリのクローンを作成します。次の図は、この戦略をグラフで表したものです。
図に示すように、ブランチ戦略は次のものから構成されます。
- メインブランチ。メインブランチのコードは、本番環境で実行されているコードの現在のバージョンを反映しています。
- リリース ブランチ。リリース ブランチは、(機能ブランチと比較して)比較的存続期間が長いブランチで、リリースに関連するすべての変更とコードを調整します。組織は、新しいリリースごとに新しいリリース ブランチを作成します。
- 1 つ以上の機能ブランチ。機能ブランチは、進行中の作業をメインブランチ内の最新バージョンのコードから分離するのに役立ちます。通常、複数の機能ブランチが 1 つのリリース ブランチを構成します。バグの修正のために、開発者が機能ブランチを作成することをおすすめします。
開発者は、プロジェクト リポジトリのクローンを作成した後に、ローカルマシンまたは Salesforce のスクラッチ組織で開発を行います。スクラッチ組織を使用して、変更内容の単体テストを行えます。単体テストに合格すると、コードを commit し、ソースコード リポジトリに push します。次に、コードを親のリリース ブランチにマージする pull リクエストを作成します。
pull リクエストによって、次の処理を行う Cloud Build ジョブが自動的にトリガーされます。
- 単体テストを行うためのスクラッチ組織を新しく作成する。
- テスト結果を受けて pull リクエストを更新する。
この時点で、チームリーダーとプロダクト オーナーは pull リクエストを確認できます。リクエストが承認されると、変更がリリース ブランチにマージされます。
ソフトウェア開発ライフサイクルに応じて、リリース ブランチへのマージによりトリガーされる別の自動ステップを備えることができます。自動ステップの例に、品質保証またはシステム インテグレーション テストなどの上位サンドボックスへの検証済みのコードのデプロイがあります。
また、Cloud Functions や Cloud Run などの Google Cloud ツールを使用し、ビルド通知の送信などの追加アクションを行うように Cloud Build を構成できます(このチュートリアルでは、これらの追加アクションについては説明しません)。この手法により、自社のエンタープライズ DevOps フレームワークに合わせてパイプラインを柔軟にカスタマイズできます。
わかりやすくするため、このチュートリアルでは、サンプル コードベースを単一の Salesforce 組織(Dev Hub)にデプロイします。本番環境用の CI / CD パイプラインを構築すると、前述のアーキテクチャを使用して、ソフトウェア開発ライフサイクルの一部であるサンドボックスへのデプロイを自動化できます。
通常ソフトウェア開発に関わるペルソナ
組織はすべて異なっており、それぞれが独自の構成で役割とチームを備えています。下の表に、このチュートリアルで説明するような Salesforce DevOps パイプラインとインタラクションを行う主要なペルソナ(役割)を示します。
Salesforce パイプラインの設定に関する各役割の責任は異なります。そのため、このチュートリアルには 2 つの道筋があります。一方の道筋は管理者と DevOps リード向けで、もう一方の道筋は開発者向けです。
ペルソナ | 責任 |
---|---|
管理者または DevOps リード |
|
Salesforce 開発者 |
|
QA リード |
|
リリースリード |
|
Salesforce 管理者および DevOps リード用のパイプラインを設定する
このセクションでは、管理者と DevOps のチームが CI / CD ワークフローを設定するために行う必要がある作業について説明します。
Dev Hub 組織を有効にする
- Salesforce 本番組織にログインします。
[設定] タブの [クイック検索] ボックスに「
Dev Hub
」と入力し、[Dev Hub] を選択します。Dev Hub を有効にします。
このステップでは、スクラッチ組織を設定します。スクラッチ組織を使用して、このチュートリアルのサンプルコードを Salesforce Developer Edition 組織にデプロイします。
証明書と鍵のペアを作成する
Dev Hub 組織を有効にした後、Salesforce Dev Hub 組織の認証に使用できる証明書と鍵のペアを生成する必要があります。この証明書と鍵のペアは、後のステップで Cloud Build を構成する際に使用します。
本番環境の CI / CD パイプラインの場合は、Salesforce サンドボックスの認証用に追加の証明書を生成する必要があります(このチュートリアルでは、これらの追加証明書は作成しません)。各環境の証明書と鍵のペアを生成するときは、次の例のように、識別可能な名前を付けてください。
- 本番環境(Dev Hub 組織):
salesforce.key
とsalesforce.crt
。これらの名前は次の手順で使用します。 - 品質保証サンドボックス(QA):
salesforce_qa.key
とsalesforce_qa.crt
。 - 統合開発サンドボックス(IDEV):
salesforce_dev.key
とsalesforce_dev.crt
。
証明書と鍵のペアの生成手順は次のとおりです。
Cloud Shell で、証明書と鍵のペアを生成し、Cloud Build が Salesforce CLI から Salesforce Dev Hub 組織に対して認証できるようにします。
openssl req -x509 -sha256 -nodes -days 36500 -newkey \ rsa:2048 -keyout salesforce.key -out \ salesforce.crt
証明書を識別する詳細情報の入力を求められます。このチュートリアルでは、これらの値は重要でないため、Enter キーを押してデフォルト値を受け入れます。
このコマンドでは、
salesforce.key
とsalesforce.crt
という名前を使用していることに注意してください。これは、Dev Hub 組織の証明書と鍵のペアを作成しているためです。[さらに表示] をクリックして、[ファイルをダウンロード] を選択します。
[完全修飾ファイルパス] ボックスに、次のファイル名を入力し、[ダウンロード] をクリックします。
salesforce.crt
生成された証明書がローカルマシンにダウンロードされます。次のセクションで、証明書を Salesforce 組織にアップロードします。
Salesforce で接続アプリを作成する
このセクションでは、Cloud Build が Salesforce コードのデプロイに使用できる接続アプリケーションを作成します。このチュートリアルでは、Dev Hub 組織にのみコードをデプロイします。本番環境では、Cloud Build に DevOps パイプライン用の Salesforce コードをデプロイさせたい各サンドボックスと本番組織に対して、コードをデプロイします。
このプロセスの一部として、前のセクションで生成した証明書と鍵のペアを使用します。この証明書は、Cloud Shell セッションで Salesforce Dev Hub 組織(Salesforce サンドボックス)に対して Salesforce クライアントを認証するための公開鍵です。この証明書は、自動デプロイでの Cloud Build の認証にも使用されます。
以下の手順の一部は、ご利用の Salesforce のエディションによって細部が異なります。選択した環境に応じた正しい証明書と鍵のペアを使用してください。
Salesforce Lightning Experience を使用している場合、アプリ マネージャーを使用して接続アプリを作成します。Salesforce 組織の [設定] から次の操作を行います。
- [クイック検索] ボックスに「
App
」と入力します。 - [アプリケーション マネージャー] を選択します。
- [新規接続アプリケーション] をクリックします。
Salesforce Classic を使用している場合、Salesforce 組織の設定から次の操作を行います。
- [クイック検索] ボックスに「
Apps
」と入力します。 - [ビルド] > [作成] で [アプリケーション] を選択します。
- [接続アプリケーション] で [新規] をクリックします。
- [クイック検索] ボックスに「
アプリケーションの名前には、「
Google Cloud DevOps
」と入力します。これにより、[API 名] ボックスに「
Google_Cloud_DevOps
」と表示されます。連絡先メール情報とアプリケーションに適切なその他の情報を入力します。
[OAuth 設定の有効化] を選択します。
[コールバック URL] の値として次の URL を入力します。
http://localhost:1717/OauthRedirect
デジタル署名を使用するオプションを有効にするには、[ファイルを選択] をクリックし、以前にダウンロードした
salesforce.crt
ファイルを選択します。[選択した OAuth 範囲] に次の OAuth 範囲を追加します。
- データにアクセスして管理する(api)
- 随時ユーザーに代わってリクエストを実行する(refresh_token、offline_access)
- ウェブ経由でデータにアクセスする(web)
[保存] をクリックし、[続行] をクリックします。
API セクションに表示される [コンシューマ鍵] の値を書き留めます。これは、後に Cloud Build マニフェストを設定するときに必要になります。
本番環境で作業している場合、デプロイ環境ごとに鍵があります。
[管理] をクリックし、OAuth ポリシーを変更するため、[ポリシーを編集] をクリックします。
[許可されているユーザー] を [管理者が承認したユーザーは事前承認済み] に設定し、この選択を確定します。
[IP 制限の緩和] を [IP 制限の緩和] に設定します。
[保存] をクリックします。
[プロファイルの管理] をクリックし、[システム管理者] オプションを選択します。
この手順を終えると、このプロファイルを持つユーザーは Salesforce CLI にログインできます。
[保存] をクリックします。
Google Cloud 環境を初期化する
Cloud Shell で、デフォルト プロジェクトとして作成または選択したプロジェクトを設定します。
gcloud config set project PROJECT_ID
PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。
リージョンとゾーンを設定します。
gcloud config set compute/region us-central1 gcloud config set compute/zone us-central1-a
このチュートリアルでは、リージョンとして
us-central1
を使用し、ゾーンとしてus-central1-a
を使用します。現在の Google プロジェクト ID を
GCP_PROJECT_NUMBER
という名前の環境変数にエクスポートします。export GCP_PROJECT_NUMBER=$(gcloud projects describe $DEVSHELL_PROJECT_ID --format='value(projectNumber)')
Salesforce の鍵を Cloud Storage にアップロードする
Cloud Shell で、ビルド プロジェクトに Salesforce 秘密鍵ファイルを保存する Cloud Storage バケットを作成します。
gsutil mb -p ${DEVSHELL_PROJECT_ID} -l us-central1 \ gs://salesforce-ref-${DEVSHELL_PROJECT_ID}
バケットにはグローバルに一意の名前が必要です。このコマンドは、Google Cloud プロジェクト ID を含むバケット名を作成します。
Dev Hub 組織を有効にするセクションで生成した Salesforce 秘密鍵を新しい Cloud Storage バケットにコピーします。
gsutil cp salesforce.key gs://salesforce-ref-${DEVSHELL_PROJECT_ID}
GitHub リポジトリを作成する
Cloud Shell で、このチュートリアルに関連付けられているリポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/salesforce-serverless-cicd-cloudbuild
DEV_REPO_NAME
という名前の新しい GitHub リポジトリを作成します。DEV_REPO_NAME は、ローカルでリポジトリに割り当てる名前に置き換えます。
これは、開発者がコードを pull または push するリポジトリです。このチュートリアルでは、このリポジトリを自分の GitHub アカウントに作成します。
クローン リポジトリに移動します。
cd salesforce-serverless-cicd-cloudbuild
開発者の GitHub リポジトリをリモート リポジトリとして追加します。
git remote add github DEV_REPO_NAME
Cloud Build を構成する
このセクションでは、作業をリリース ブランチにマージする pull リクエストを開発者が作成したときに Cloud Build ジョブをトリガーするために必要な設定を、手順に沿って行います。
このチュートリアルで作成する CI / CD パイプラインに対し、次の 2 つのトリガーを設定します。
- コードをリリース ブランチにマージする pull リクエストを開発者が作成したときに Cloud Build ジョブを実行するトリガー。このトリガーは通常、単体テストを行うために使用されます。
- pull リクエストがリリース ブランチにマージされたときに Cloud Build ジョブを実行するトリガー。このトリガーは通常、宛先サンドボックス(このチュートリアルでは Dev Hub)に変更をデプロイするために使用されます。
Salesforce DX を含むベースイメージをビルドする
Cloud Build は、ビルドを一連のステップとして実行し、各ステップは Docker コンテナ内で実行されます。Salesforce CLI を含むベース Docker コンテナ イメージをビルドします。Cloud Build は Salesforce CLI コマンドを使用してジョブを実行します。
Cloud Shell で、ビルドするイメージの Dockerfile を作成します。
cat <<EOF > Dockerfile FROM debian:buster RUN apt-get update && \ apt-get install -y wget xz-utils RUN wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz && \ mkdir sfdx && \ tar xJf sfdx-linux-amd64.tar.xz -C sfdx --strip-components 1 && \ ./sfdx/install ENTRYPOINT [ "sfdx" ] EOF
Docker イメージ名を
SFDX_BASE_IMAGE
という名前の環境変数にエクスポートします。export SFDX_BASE_IMAGE="gcr.io/${DEVSHELL_PROJECT_ID}/salesforcedx-base-image:1"
Cloud Build でコンテナをビルドし、イメージを Container Registry に公開します。
gcloud builds submit --tag ${SFDX_BASE_IMAGE}
Cloud Build ジョブを構成する
Cloud Build ジョブは、cloudbuild.yaml
ファイルを編集して定義します。
Cloud Shell で
cloudbuild.yaml
ファイルを作成し、Cloud Build が Salesforce の Dev Hub 組織にコードをデプロイするときに実行されるジョブステップを定義します。cat <<EOF > cloudbuild.yaml steps: - name: gcr.io/cloud-builders/gsutil args: ['cp', 'gs://\${_BUCKET_NAME}/salesforce.key', 'salesforce.key'] - name: "${SFDX_BASE_IMAGE}" args: - force:auth:jwt:grant - --setdefaultusername - -u - \${_SF_USERNAME} - -f - ./salesforce.key - -i - \${_CONSUMER_KEY} - name: "${SFDX_BASE_IMAGE}" args: ['force:source:deploy', '-p', './force-app/'] substitutions: _BUCKET_NAME: __BUCKET_NAME__ _SF_USERNAME: __USERNAME__ _CONSUMER_KEY: __CONSUMER_KEY__ EOF
このファイルにより、次の処理を行う Cloud Build が構成されます。
- Cloud Build が Dev Hub 組織の認証に使用する
salesforce.key
ファイルをダウンロードする。 - Salesforce CLI がインストールされている Docker コンテナを起動し、JWT 付与を使用して Dev Hub 組織に接続する。Cloud Build は、Cloud Build トリガー定義に含まれる構成パラメータであるコンシューマ鍵や Salesforce ユーザー名などを使用します。
- 開発者が push したコードを、本番環境の CI / CD パイプラインの Dev Hub 組織または他の宛先サンドボックスにデプロイする。
- Cloud Build が Dev Hub 組織の認証に使用する
cloudbuild_pr.yaml
という別のファイルを作成し、Cloud Build が pull リクエストのコードを一時的な Salesforce スクラッチ組織またはサンドボックスにテスト用にデプロイするときに実行されるジョブステップを定義します。cat <<EOF > cloudbuild_pr.yaml steps: - name: gcr.io/cloud-builders/gsutil args: ['cp', 'gs://\${_BUCKET_NAME}/salesforce.key', 'salesforce.key'] - name: "${SFDX_BASE_IMAGE}" args: - force:auth:jwt:grant - -u - \${_SF_USERNAME} - -f - ./salesforce.key - -i - \${_CONSUMER_KEY} - name: "${SFDX_BASE_IMAGE}" args: - force:org:create - --setdefaultusername - --definitionfile - config/project-scratch-def.json - --targetdevhubusername - \${_SF_USERNAME} - --setalias - testing org - name: "${SFDX_BASE_IMAGE}" args: ['force:source:push'] - name: "${SFDX_BASE_IMAGE}" args: ['force:apex:test:run', '--resultformat', 'tap', '--codecoverage'] - name: "${SFDX_BASE_IMAGE}" args: ['force:org:delete', '--noprompt'] substitutions: _BUCKET_NAME: __BUCKET_NAME__ _SF_USERNAME: __USERNAME__ _CONSUMER_KEY: __CONSUMER_KEY__ EOF
このファイルにより、次の処理を行う Cloud Build が構成されます。
- Cloud Build が Dev Hub 組織の認証に使用する
salesforce.key
ファイルをダウンロードする。 - Salesforce DX CLI がインストールされている Docker コンテナを起動し、JWT 付与を使用して Dev Hub 組織に接続する。Cloud Build は、Cloud Build トリガー定義に含まれる構成パラメータであるコンシューマ鍵や Salesforce ユーザー名などを使用します。
- 開発者の自動テスト用コードをデプロイするための新しいスクラッチ組織を作成する。
- スクラッチ組織で Apex テキストを実行する。
- Apex テキストの結果を出力する。この結果は、GitHub の pull リクエストのサマリーで使用できるようになります。
- 一時的なスクラッチ組織を削除する。
- Cloud Build が Dev Hub 組織の認証に使用する
リポジトリを GitHub に push する
Cloud Shell で、新しい
cloudbuild yaml
ファイルと Dockerfile をリポジトリに add し、DEV_REPO_NAME リポジトリのメインブランチに push します。GitHub へのログインを求められたら、ログインします。git add . git commit -m "Added cloud build configuration" git push github main
開発者がコードを pull または push できるリリース ブランチを作成します。このチュートリアルでは、そのブランチに
release-sample
という名前を付けます。git checkout -b release-sample
ブランチを GitHub に push します。
git push github release-sample
GitHub リポジトリを Cloud Build に接続する
- GitHub マーケットプレイスの [Cloud Build Application] ページに移動します。
- 下にスクロールし、[Setup with Google Cloud Build] をクリックします。GitHub へのログインを求められたら、ログインします。
- リポジトリを Cloud Build に接続します。
- [Only select repositories] を選択します。
- [Select repositories] リストで、[repository] を選択します。
- [Install] をクリックします。
Google Cloud にログインします。
[Authorization] ページが表示され、Google Cloud Build アプリケーションが Google Cloud に接続するのを認可するよう求められます。
[Authorize Google Cloud Build by GoogleCloudBuild] をクリックします。
Google Cloud コンソールにリダイレクトされます。
Google Cloud プロジェクトを選択します。
利用規約に同意する場合は、同意し、[次へ] をクリックします。
[リポジトリを選択] ページで DEV_REPO_NAME GitHub リポジトリを選択します。
[リポジトリを接続] をクリックします。
[push トリガーを作成] をクリックします。
Cloud Build トリガー定義を更新する
前のセクションで [push トリガーを作成] をクリックしたときに作成された新しいトリガーの詳細を定義します。
Google Cloud コンソールで、[Cloud Build トリガー] ページを開きます。
新しいトリガーの
[メニュー] をクリックし、[編集] をクリックします。[名前] を
pull-request-to-release-branch
に設定します。説明を
Run unit tests when a pull request is created from a feature branch
に変更します。[イベント] を [pull リクエスト(GitHub アプリのみ)] に変更します。
[ソース] の [ベースブランチ] テキスト ボックスに、次の式を入力します。
^release.*
[構成] で、[Cloud Build 構成ファイル(yaml または json)] を選択し、テキスト ボックスに「
cloudbuild_pr.yaml
」と入力します。[代入変数] で、3 つの変数を作成します。変数ごとに、次の操作を行います。
- [項目を追加] をクリックします。
[変数] フィールドと [値] フィールドを、次の表に示すように設定します。
変数 値 _BUCKET_NAME
Salesforce 鍵ファイルの Cloud Storage バケットの名前。次の形式になります。
salesforce-ref-PROJECT_ID
PROJECT_ID は実際の Google Cloud プロジェクトの ID に置き換えます。_CONSUMER_KEY
Salesforce の Dev Hub 組織で作成した接続アプリケーションのコンシューマ鍵。 _SF_USERNAME
Dev Hub 組織の Salesforce ユーザー名。
[保存] をクリックします。
このページを閉じないでください。次の手順では、このページでさらに作業を行います。
2 つ目の Cloud Build トリガーを作成する
次のステップは、リリース ブランチに commit が行われたときに Cloud Build ジョブを開始する別のトリガーの作成です。このトリガーは、Cloud Build ジョブを呼び出し、変更を Dev Build 組織に push します。DevOps パイプラインでは、承認された担当者とプロセスのみが変更をリリース ブランチに commit できるようにする必要があります。
- [Cloud Build トリガー] ページで、[トリガーを作成] をクリックして、新しいトリガーを作成します。
- [名前] を
commits-to-release-branch
に設定します。 - [トリガーのタイプ] で、[ブランチに push する] を選択します。
- [リポジトリ] リストで、GitHub Salesforce リポジトリを選択します。
[ブランチ(正規表現)] テキスト ボックスに次の式を入力します。
^release.*
[ビルド構成] で、[Cloud Build 構成ファイル] を選択し、「
cloudbuild.yaml
」と入力します。[代入変数] で、3 つの変数を作成します。変数ごとに、次の操作を行います。
- [項目を追加] をクリックします。
[変数] フィールドと [値] フィールドを、次の表に示すように設定します。
変数 値 _BUCKET_NAME
Salesforce 鍵ファイルのバケット名を次の形式で入力します。
salesforce-ref-PROJECT_ID
PROJECT_ID は実際の Google Cloud プロジェクトの ID に置き換えます。_CONSUMER_KEY
Salesforce の Dev Hub 組織で作成した接続アプリケーションのコンシューマ鍵。 _SF_USERNAME
Dev Hub 組織の Salesforce ユーザー名。
[保存] をクリックします。
Cloud Build に Salesforce の鍵の読み取り権限を追加する
Cloud Shell で、作成された Cloud Storage バケットから Salesforce の鍵を読み取る権限を Cloud Build サービス アカウントに追加します。
gsutil iam ch serviceAccount:[email protected]:objectViewer \ gs://salesforce-ref-${DEVSHELL_PROJECT_ID}
Salesforce 開発者用のパイプラインを設定する
このセクションで説明するタスクは、Salesforce 開発者を対象としています。
このチュートリアルの管理者およびリード向けのセクションで先に説明した手順を行った場合は、別の認証情報セットを使用してこのセクションの手順を行ってください。
Salesforce DX CLI のインストール手順は、使用している OS によって異なることがあります。このセクションでは、Debian Linux の手順について説明します。macOS と Windows の手順については、Salesforce ドキュメントの Salesforce CLI のインストールをご覧ください。
Salesforce DX CLI を設定する
このセクションでは、Salesforce CLI をインストールして、その CLI が認可されるように設定します。
(Cloud Shell 内ではない)ローカルマシンで、ホーム ディレクトリに移動します。
cd $HOME
xz-utils
とwget
をインストールします。sudo apt-get install --assume-yes xz-utils wget
Salesforce CLI をインストールします。
wget https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
sfdx
ディレクトリを作成します。mkdir sfdx
ダウンロードした tar ファイルを展開します。
tar xJf sfdx-linux-amd64.tar.xz -C sfdx --strip-components 1
CLI をインストールします。
./sfdx/install
Salesforce CLI は、
/usr/local/bin/sfdx
にインストールされます。CLI が正しく設定されていることを確認します。
sfdx
出力は次のようになります。
VERSION sfdx-cli/7.8.1-8f830784cc linux-x64 node-v10.15.3 USAGE $ sfdx [COMMAND] COMMANDS commands list all the commands force tools for the Salesforce developer help display help for sfdx plugins add/remove/create CLI plug-ins update update the sfdx CLI which show which plugin a command is in TOPICS Run help for each topic below to view subcommands commands list all the commands force tools for the Salesforce developer plugins add/remove/create CLI plug-ins
ローカル開発環境を Salesforce Dev Hub 組織に接続する
ローカルマシンから、開発者ロールの認証情報を使用して Salesforce 組織にログインします。
sfdx force:auth:web:login --setalias YOUR_HUB_ORG
YOUR_HUB_ORG は、Dev Hub 組織の適切なエイリアスに置き換えます。
このコマンドはローカルマシンでウェブブラウザを開くため、接続先の VM では実行できません。
GitHub リポジトリのクローンを作成する
Salesforce 管理者が作成した GitHub リポジトリのクローンを作成します。
git clone DEV_REPO_NAME -o github
クローンされたリポジトリのディレクトリに移動します。
cd DEV_REPO_NAME
Salesforce のコードベースとメタデータをスクラッチ組織に push する
このセクションでは、単体テストが可能になるように、コードベースとメタデータをスクラッチ組織に push します。
ローカルマシンで、Dev Hub のユーザー名を
SALESFORCE_USERNAME
という名前の環境変数にエクスポートします。export SALESFORCE_USERNAME=YOUR_DEVHUB_USERNAME
YOUR_DEVHUB_USERNAME は、先に設定したユーザー名に置き換えます。
このチュートリアル用にクローンを作成したリポジトリをテストするためのスクラッチ組織を作成します。
sfdx force:org:create \ --setdefaultusername \ --definitionfile config/project-scratch-def.json \ --targetdevhubusername ${SALESFORCE_USERNAME} \ --setalias feature-test-scratch-org
メタデータとコードをスクラッチ組織に push します。
sfdx force:source:push
スクラッチ組織の URL を生成し、ブラウザ ウィンドウでその URL に移動します。
sfdx force:org:open
通常、プロジェクトのライフサイクルにおける次のステップでは、単体テストを実行し、開発した機能を検証します。このチュートリアルでは、事前検証済みのサンプルコードを取り扱っているため、単体テストを行いません。
コードをソースコード リポジトリに push する
ローカルマシンで、
feature-1
という名前の新しいブランチを作成します。git checkout -b feature-1
変更をソースコード リポジトリに push します。
git add . git commit -m "Feature 1 changes" git push github feature-1
このチュートリアルでは、ソースコード ツールとして GitHub を使用します。
デプロイをテストする
このセクションでは、作成したトリガーが機能することを確認するために実行できるテストについて説明します。Salesforce 管理者が作成したリポジトリには、サンプルのテストクラスが含まれています。
(Cloud Shell 内ではない)ローカルマシンで、新しい Git ブランチを作成します。
git checkout -b feature-1
テキスト エディタを使用して、次のファイルを開きます。
./force-app/main/default/classes/SampleTest.cls
テストに失敗するには、
System.assertEquals
ステートメントで101
の値を102
に変更します。変更後にファイルを保存します。このファイルは後の手順で再変更するため、開いたままにしておきます。@isTest public class SampleTest { static testmethod void testAddOne() { Test.startTest(); System.assertEquals(Sample.addOne(100), 102); // Change to 102 from 101 Test.stopTest(); } }
変更を add し、機能ブランチに commit します。
git add . git commit -m "Changed test case" git push github feature-1
コードを release-sample ブランチにマージする pull リクエストを作成します。
新しい Cloud Build ジョブがトリガーされます。しかし、単体テストが失敗するため、ジョブも失敗します。
ビルドのステータスを表示するには、Cloud Build ページを開きます。
Cloud Build ページの履歴セクションに移動します。
次に示すジョブのビルドログが表示され、テストのアサーションが失敗しています。
Step #4: not ok 1 SampleTest.testAddOne Step #4: # System.AssertException: Assertion Failed: Expected: 101, Actual: 102 Step #4: # Class.SampleTest.testAddOne: line 24, column 1 Step #4: # Run "sfdx force:apex:test:report -i 7076300001gEzne --resultformat <format>" to retrieve test results in a different format. [. . .] Finished Step #4 ERROR ERROR: build step 4 "gcr.io/serverless-devops-sf/salesforcedx-base-image:1" failed: step exited with non-zero status: 100
テストに成功するには、
./force-app/main/default/classes/SampleTest.cls
ファイルの102
の値を101
に戻します。@isTest public class SampleTest { static testmethod void testAddOne() { Test.startTest(); System.assertEquals(Sample.addOne(100), 101); //Change back to 101 from 102 Test.stopTest(); } }
変更を add し、機能ブランチに commit します。
git add . git commit -m "Changed test case to make it pass" git push github feature-1
commit オペレーションにより、Cloud Build ジョブがトリガーされます。
ジョブが完了したら、GitHub で pull リクエストを確認し、
release-sample
ブランチにマージします。本番環境のワークフローでは、pull リクエストをマージする権限は通常、DevOps リードと管理者に限定されます。この設定方法の詳細は、GitHub サイトの pull リクエストのマージ可能性を定義するをご覧ください。
Google Cloud コンソールで、pull リクエストを release-sample ブランチにマージしたときに自動的にトリガーされる Cloud Build ジョブを確認します。
ジョブが完了したら、Dev Hub 組織にログインします。開発者または管理者としてログインできます。
この Salesforce 組織では、開発者のコードを変更できます。これを確認するには、設定ページに移動し、カスタムコード / Apex クラスをご覧ください。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Salesforce リソースを削除する
このチュートリアル用に作成した Salesforce Developer Edition 組織および関連するスクラッチ組織も削除できます。
Developer Edition 組織を無効にする
- Salesforce の Dev Hub 組織に移動します。
- [設定] の [クイック検索] ボックスに「
Company
」と入力し、[組織情報] を選択します。 - [組織情報] をクリックします。
[組織を無効化] ボタンをクリックします。
スクラッチ組織を削除する
Cloud Shell で、次のコマンドを実行して Salesforce スクラッチ組織を削除します。
sfdx force:org:delete -u feature-test-scratch-org
GitHub リポジトリを削除する
GitHub に移動し、このチュートリアル用に個人アカウントで作成したリポジトリを削除します。
次のステップ
Cloud アーキテクチャ センターで、リファレンス アーキテクチャ、図、ベスト プラクティスを確認する。