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