LoginSignup
6
1

More than 5 years have passed since last update.

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

Posted at

はじめに

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の歯車アイコンを開きます。

image.png

[Environment Variables]の[Add Variable]ボタンから以下の4つの環境変数を追加します。

image.png

  • 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が実行されます。

image.png

しばらく待つと[WORKFLOWS]タブで成功しているのが確認できます。

image.png

以降はpushする度にこのWorkflowが実行されます。

おわりに

Salesforce Platform Advent Calendar 2018もいろいろ記事が上がっていますので、そちらもぜひお読みください。

昨日、私はこんな記事「BlenderでSalesforce アストロくんのペーパークラフトを作る」を書きましたが、他は真面目な記事ばかりでためになりますよ。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1