Salesforce Force.com Apex のテストを CircleCI 2.0 で行う
長瀬 敦史
CircleCI の新バージョン 2.0 は現在、パブリックベータとして提供されており、現行版の 1.0 とは違い、ビルドを実行する Docker Image を指定できるようになっています。
ref: CircleCI 2.0
これを利用して、Salesforce Force.com Apex のテストとデプロイを行うための Docker Image とサンプルプロジェクトを公開しました。
以下にセットアップ手順を記載します。
設定手順
1. ディレクトリ構成
ディレクトリ構成は Force IDE が使用しているファイル・ディレクトリ名に互換しています。
.
├── src
│ ├── classes
│ │ └── MyClass.cls
│ └── triggers
│ └── MyTrigger.trigger
│
└── wsdl # 後述
├── apex.wsdl
└── enterprise.wsdl
2. WSDL のダウンロード
WSDL ファイルと、それを元に生成される Java ライブラリは、インスタンスの状態によって内容が違うため、Docker Image には含んでいません。
以下の手順で WSDL ファイルをプロジェクトに追加します。
- 設定 のクイック検索から API 画面を検索
- Enterprise WSDL の生成 と Apex WSDL を右クリックメニューなどからコンピュータにダウンロード
- プロジェクトディレクトリ内
wsdl
フォルダに.wsdl
という拡張子で保存し、バージョン管理に追加
3. .circleci/config.yml
CircleCI の設定は今までの circle.yml
ではなく、 .circleci
というディレクトリに config.yml
というファイル名で記述します。記述内容には互換性はありません。
ref: Configuring Jobs
master
ブランチのビルドでは、後述の環境変数で設定したインスタンスに Apex コードを反映します。
version: 2
jobs:
build:
working_directory: /repo
docker:
- image: atsnngs/force-com:latest
steps:
- checkout
- run:
command: rm -rf /src /wsdl && mv /repo/src /src && mv /repo/wsdl /wsdl
- run:
command: export DEPLOY=$([[ $CIRCLE_BRANCH == 'master' ]] && echo 1 || true); /entrypoint/run.sh
4. 環境変数の設定
CircleCI のプロジェクト設定内 Environment Variables 画面にて、必要な環境変数を設定します。
SF_SERVER
API エンドポイント。利用しているインスタンスのドメインを元にします。
例: https://ap5.salesforce.com
の場合 https://ap5-api.salesforce.com
SF_USERNAME
Salesforce のログイン ID。
SF_PASSWORD
Salesforce のログインパスワード。
もし2段階認証を有効にしている場合は、パスワードに続けてセキュリティートークンを入力します。
セキュリティートークンの取得方法がわからない場合は以下のヘルプドキュメントを参照してください。
その他 活用方法
今回の目的は継続的ビルドと配信でしたが、ローカルの Docker を使ったコマンドラインビルドにも活用できます。
docker pull atsnngs/force-com
cat > envfile.txt <<ENVFILE
SF_USERNAME=you@example.com
SF_PASSWORD=PASSWORD+SECURITY_TOKEN
SF_SERVER=https://xxx-api.salesforce.com
ENVFILE
docker run \
-v $(pwd)/wsdl:/wsdl \
-v $(pwd)/src/classes:/src/classes \
-v $(pwd)/src/triggers:/src/triggers \
--rm \
--env-file envfile.txt \
atsnngs/force-com
Salesforce プラットフォームを利用したアイデアや困りごとがありましたら、ぜひディスカッションしましょう。