はじめに
Salesforceの最近のサンプルアプリはみなCircle CIを使っています。
- ご存知「DreamHouse」
- 最近公開されたLWCのサンプル「ebikes-lwc」
- 先日紹介したISVパッケージ開発テンプレート「SFDX-Falcon」
Circle CIの手順はSalesforce DX開発者ガイドの「CircleCI を使用した継続的インテグレーション 」に書いてありますが、ebikes-lwcで設定を試してみましたので、手順をまとめておきます。
ドキュメントのsfdx-circleciリポジトリと違って、ebikes-lwcはCircle CIのWorkflowを使っていたり、LWCのコードのlintやユニットテストをしていますが、まあ動かす手順には特に関係ないですね。
ポイント
ポイントはDevHub組織にどうJWT認証するかです。後はただ必要なsfdxコマンドを呼ぶだけです。
Salesforceのサンプルアプリだと2パターンあります。
- JWT認証の秘密鍵を16進ダンプしてCircle CIの環境変数に設定する
- JWT認証の秘密鍵をさらに暗号化してリポジトリに入れ、暗号化に使った秘密鍵とIVをCircle CIの環境変数に設定し、CIのジョブで復号化して認証する。
上に挙げた例だとSFDX-Falconが1で、残りは2ですが、ドキュメントもそうなっていますし、やはり安全を考えると2の一択になります。
Travis CIの場合は、travis encrypt-fileというコマンドで2の処理が簡単にできますが、Circle CIにはその機能がないのでちょっとがんばる必要があります。
ebikes-lwcをCircle CIで動かす
では、試しにebikes-lwcをCircle CIで動かしてみましょう。
前提
- LWCアプリなので、DevHub組織としてSpring'19プレビュー組織を設定。
- 使わないのですが、パッケージ作成組織が必要。(「
SFDX_AUTH_PACKAGINGについて」参照)
DreamHouseもたぶんほぼ一緒なのでSpring'19環境を用意するのが面倒な方はそちらを試してみてください。
リポジトリをfork
まず、 https://github.com/trailheadapps/ebikes-lwc をforkしてください。
接続アプリケーションの作成
基本的に以下のTrailheadの通りに設定してください。
接続アプリケーションの作成 単元 | Salesforce Trailhead
SSL証明書を作るときは、CountryにJPとCommon Nameだけ入れておけばとりあえず動きます。
暗号化した秘密鍵を作成
上記で作成したserver.keyを暗号化するためのkeyとivを作成します。
$ openssl enc -aes-256-cbc -k <パスフレーズ> -P -md sha1 -nosalt
key=*****99999
iv =*****99999
server.keyを暗号化します。
$ openssl enc -nosalt -aes-256-cbc -in certificates/server.key -out certificates/server.key.enc -base64 -K <上のkey> -iv <上のiv>
server.key.encができるので、.circleci/server.key.encと置き換えます。
.circleci/server.key.encを置き換えたら、GitHubにpushしてください。
Circle CIに設定
[SETTINGS] > [Projects]のforkしたebikes-lwcの歯車アイコンを開きます。
[Environment Variables]の[Add Variable]ボタンから以下の4つの環境変数を追加します。
-
CONSUMERKEY_PRERELEASE: 作成した接続アプリのコンシューマキー -
USERNAME_PRERELEASE: DevHub組織のユーザ名 -
DECRYPTION_KEY: 前の手順で作成した復号化のためのkey -
DECRYPTION_IV: 前の手順で作成した復号化のためのiv -
SFDX_AUTH_PACKAGING: 後述
※
ebikes-lwcの場合はこのような環境変数になりますが、他のサンプルアプリだと環境変数名が異なったりするので、.circleci/config.ymlを確認してください。
SFDX_AUTH_PACKAGINGについて
SFDX_AUTH_PACKAGINGはパッケージ作成組織のsfdxAuthUrlを指定します。
パッケージの作成のテストをするための設定で、SFDX_TEST_PACKAGING環境変数をtrueにすると、そのテストもしようとします。しかし、scripts/packagingDeployment.shが存在しないので、エラーになります。DreamHouseだとあるので、設定だけコピーしてきたんだと思います。そして、true以外にしてもパッケージ作成組織への認証をスキップはしてくれないので、一応設定します。
sfdxAuthUrlは、以下のコマンドで出力できます。出力JSON内のsfdxAuthUrlというキーの値を設定してください。force://<clientId>:<clientSecret>:<refreshToken>@<instanceUrl>のような形式になっています。
$ sfdx force:org:display -u <パッケージ作成組織のエイリアス> --json --verbose
まあどっちにしても動かないので、SFDX_TEST_PACKAGINGは設定せず、.circleci/config.ymlから以下の二行を削除してもよいと思います。
echo $SFDX_AUTH_PACKAGING > ~/auth.url
node_modules/sfdx-cli/bin/run force:auth:sfdxurl:store -s -a packagingorg -f ~/auth.url
CIの実行
[Follow Project]ボタンをクリックすると、Workflowが実行されます。
しばらく待つと[WORKFLOWS]タブで成功しているのが確認できます。
以降はpushする度にこのWorkflowが実行されます。
おわりに
Salesforce Platform Advent Calendar 2018もいろいろ記事が上がっていますので、そちらもぜひお読みください。
昨日、私はこんな記事「BlenderでSalesforce アストロくんのペーパークラフトを作る」を書きましたが、他は真面目な記事ばかりでためになりますよ。



