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 ファイルをプロジェクトに追加します。

  1. 設定 のクイック検索から API 画面を検索
  2. Enterprise WSDL の生成Apex WSDL を右クリックメニューなどからコンピュータにダウンロード
  3. プロジェクトディレクトリ内 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 プラットフォームを利用したアイデアや困りごとがありましたら、ぜひディスカッションしましょう。