第二回では、JWTベースフローを使用した組織の認証で、非公開鍵と自己署名デジタル証明書の作成からサーバーキーの暗号化までの手順をご説明しました。
第三回の今回は、CircleCI を DevHub に接続から最後のCircleci での自動ビルドまでの設定して、動かしてみましょう。
前回の記事はこちら
-
参考CircleCIを使った継続的インテグレーション(Continuous Integration)第2回
第一回では、GuthubのセットアップからCircleCIのセットアップ、そしてGitHubとの連携と、DevHubの有効化までの手順をご説明しました。 第二回の今回は、Salesforceの組織とC ...
続きを見る
CircleCI を DevHub に接続
CircleCI を認証して接続アプリケーション経由でコンテンツを Dev Hub に転送できるようにします。
手順①コマンドプロンプトを起動し、server.key ファイルがあるフォルダから JWT ベース認証を実行できることを確認します。
以下のコマンドを実行
command
>sfdx auth:jwt:grant --clientid <your_consumer_key> --jwtkeyfile server.key --username <your_username> --setdefaultdevhubusername
【実行例】
command
>sfdx auth:jwt:grant --clientid 3MVG95mg0lk4batiP7Q5f8gZVROjIpEdZT... --jwtkeyfile server.key --username cclt.sfdc@mail.com --setdefaultdevhubusername
以下のようなメッセージが表示されれば認証成功です。
Successfully authorized<ユーザ名> with org ID 00D5h000004bs...
ローカルにsfdx-circleci リポジトリをフォーク
手順①ブラウザで以下のURLへアクセスしsfdx-circleci のリポジトリを表示します。
GitHub(sfdx-circleci)
手順②GitHubを開いたら画面右上の【Fork(フォーク)】リンクをクリックします。
手順③GitHubのログイン画面が表示される場合は、IDとパスワードを入力してログインします。
手順④Create forkを実行して、sfdx-circleciリポジトリをコピーします。
手順⑤フォークが完了すると自分のGitHubに以下の内容が表示されます。
手順⑥次にCircleCIにログインして、プロジェクトメニューを表示します。
すると先ほどフォークしたsfdx-circleciのリポジトリが表示されているので、リポジトリ名のリンクをクリックします。
手順⑦config.ymlファイル選択画面が表示されます。sfdx-circleciに用意されているconfig.ymlをそのまま利用してSet up Projectを実行します。
手順⑧新規プロジェクトが作成されPipelineが実行されます。
手順⑨初回(環境設定を行っていない状態)では、実行結果がFailedとなります。
ビルドにエラーの原因が表示されます。※環境設定などを実施しない限り必ずエラーとなります。
手順⑩続いて環境設定を行います。実行結果の右側に表示されている・・・ボタンをクリックして、プロジェクト設定(Project Settings)メニューを表示します。
手順⑪プロジェクト設定画面で環境変数の設定(Environment Variables)メニューを実行します。
手順⑫以下の環境変数設定画面で、Add Environment Variableをクリックします。
手順⑬環境変数の登録画面で、以下4つのパラメータを指定します。
【登録する環境変数と値】
- [HUB_CONSUMER_KEY]:作成したSFDCの接続アプリケーション画面で生成されたコンシューマ鍵を指定します。
- [HUB_SFDC_USER]:組織に接続するユーザ名を指定します。
- [DECRYPTION_KEY]:server.keyファイルの暗号化の際に生成したkeyを指定します。
- [DECRYPTION_IV]:server.keyファイルの暗号化の際に生成したivを指定します。
※2番目のパラメータについて、Salesforceの説明サイトでは、HUB_SFDX_USERとなっていますが、sfdx-circleciから取得したconfig.ymlを確認すると正しくは、$HUB_SFDC_UESRとなっているので、間違えないように注意してください。
手順⑭続いて、server.key.encファイルを更新します。
コマンドプロンプトを起動して以下のコマンドを実行します。sfdx-circleciリポジトリをローカル環境へクローンします。
command
> cd C:\Users\e\dev\jdoe\JWT ※JWTフォルダへ移動(※Git専用のフォルダがあればそちらへ移動してもよいです)
>git clone https://github.com/<GitHubのユーザ名>/sfdx-circleci.git
Cloning into 'sfdx-circleci'...
remote: Enumerating objects: 90, done.
remote: Counting objects: 100% (24/24), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 90 (delta 9), reused 2 (delta 0), pack-reused 66
Receiving objects: 100% (90/90), 357.09 KiB | 13.73 MiB/s, done.
Resolving deltas: 100% (28/28), done.
手順⑮ローカルのgitへクローンが作成されたら..\sfdx-circleci\assets\配下にエンコードした[server.key.enc]ファイルをコピーします。
command
>copy server.key.enc sfdx-circleci\assets\
手順⑯リポジトリを作成したら次はgit addコマンドでファイルをインデックスに追加します。
command
>cd sfdx-circleci\assets\
>git add server.key.enc
手順⑰追加されたかステータスを確認
command
>git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: server.key.enc
手順⑱追加されていることを確認したらコミットします
command
>git commit -m "update server.key.end" -v
[master 827e48b] update server.key.end
1 file changed, 37 insertions(+)
create mode 100644 assets/server.key.enc
手順⑲最後にgitにプッシュします。
command
>git push
info: please complete authentication in your browser...
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 2.13 KiB | 2.13 MiB/s, done.
Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/creativecontentlabtokyo/sfdx-circleci.git
94c267b..827e48b master -> master
※GitHubへのログイン認証が必要な場合はIDとパスワードを入力します。最後にリポジトリにserver.key.encファイルが登録されていることを確認します。
手順⑳CircleCIの画面に戻り、プロジェクト[sfdx-circleci]のConfigurationを実行します。
手順㉑config.ymlについて、以下2点の修正を行いSave&Runを実行します。
- --setdefaultdevhubusername -a hub ⇒ 今回は[my-hub-org]というエイリアスを使っていたのでこちらに修正します。
- force:org:createの --waitはデフォルト2ですが、3にしたほうがよいと記載があったので3に修正します。
command sfdx force:auth:jwt:grant --clientid $HUB_CONSUMER_KEY --jwtkeyfile assets/server.key --username $HUB_SFDC_USER --setdefaultdevhubusername -a my-hub-org sfdx force --help sfdx force:org:create -s -f ~/ci_app/config/project-scratch-def.json -a circle_build_$CIRCLE_BUILD_NUM --wait 3
手順㉒CircleCIの画面に戻って、再実行されたWorkflowの結果を確認しましょう
以下のSetup Orgの箇所で、Successfully Authorized ord ID ....と表示されていれば組織認証までは成功しています。
手順㉓Setup Orgで以下のエラーが発生していたので修正していきます。
command WARNING: Warning: If you're using Contacts to Multiple Accounts, beginning with the Spring ’21 release, the feature isn't automatically enabled. You must manually enable the setting for new scratch orgs. Enable the setting in one of these ways: update the Account Settings page in Setup, add the enableRelateContactsToMultipleAccounts setting to your scratch org definition file, or enable it via Metadata API. ERROR running force:org:create: We've deprecated OrgPreferences. Update the scratch org definition file to replace OrgPreferences with their corresponding settings. Replace the orgPreferences section: { "orgPreferences": { "enabled": [ "S1DesktopEnabled" ] } } With their updated settings: { "settings": { "lightningExperienceSettings": { "enableS1DesktopEnabled": true } } } For more info on configuring settings in a scratch org definition file see: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs.htm.' Exited with code exit status 1 CircleCI received exit code 1
手順㉓GitHubの[project-scratch-def.json]ファイルを以下のように修正します。
ファイルパス:sfdx-circleci/config/project-scratch-def.json
command { "orgName": "Sample Org", "edition": "developer", "settings": { "lightningExperienceSettings": { "enableS1DesktopEnabled": true } } }
手順㉔最後にもう一度CircleCIの画面からsfdx-circleciプロジェクトのworkflowを再実行してみます。
Run Apex Tests
Setup Org
Uploading test results / Delete Useless Scratch Org
Parallel runs
全てSign up envirnmentから最後まですべて正常終了しました。
まとめ
今回の記事では、sfdx(CLI) と CircleCI を使って CI環境を作る手順について記しました。
GitHubの使い方やCircleCIなどのCI/DIツールについての基本知識がないと難しく感じる内容だったと思います。これを気に関係するツールや機能について学習することをお勧めします。