Posted at

Salesforce DXプロジェクト「ebikes-lwc」をCircle CIで動かす


はじめに

Salesforceの最近のサンプルアプリはみなCircle CIを使っています。

Circle CIの手順はSalesforce DX開発者ガイドの「CircleCI を使用した継続的インテグレーション 」に書いてありますが、ebikes-lwcで設定を試してみましたので、手順をまとめておきます。

ドキュメントのsfdx-circleciリポジトリと違って、ebikes-lwcはCircle CIのWorkflowを使っていたり、LWCのコードのlintやユニットテストをしていますが、まあ動かす手順には特に関係ないですね。


ポイント

ポイントはDevHub組織にどうJWT認証するかです。後はただ必要なsfdxコマンドを呼ぶだけです。

Salesforceのサンプルアプリだと2パターンあります。


  1. JWT認証の秘密鍵を16進ダンプしてCircle CIの環境変数に設定する

  2. 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証明書を作るときは、CountryJPCommon Nameだけ入れておけばとりあえず動きます。


暗号化した秘密鍵を作成

上記で作成したserver.keyを暗号化するためのkeyivを作成します。

$ 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 アストロくんのペーパークラフトを作る」を書きましたが、他は真面目な記事ばかりでためになりますよ。