ローカルgemなし版の続き
★この記事はEmbulk 0.8.24以降は使えない(「後日談」参照)のため非推奨★ → 改良版
基本的な考え方
- digdagサーバにpushするプロジェクトディレクトリ内にgemファイルを持っておく
- dig実行の度にその先頭で以下を実行する(※1)
- NFSディレクトリ(※2)にEmbulkプラグインインストールディレクトリを作成
- 当該ディレクトリにインストール済のEmbulkプラグインを一旦全てアンインストール(※3、※4)
- 当該ディレクトリにEmbulkプラグインをインストール(※4)
- dig内でのEmbulk実行時にEmbulkプラグインインストールディレクトリを指定(※4)
※1:2回目以降は無意味だが許容
※2:こちらの理由と似たような感じ
※3:何らかの理由でバージョンを戻したい時や不要になったプラグインがある時の為
※4:embulkコマンドにホームディレクトリを指定(-J-Duser.homeオプション)
実際の内容
$ embulk --version
embulk 0.8.18
$ digdag version
2017-04-04 13:01:55 +0900: Digdag v0.9.8
Client version: 0.9.8
Server version: 0.9.8
$ ls -F
daily.dig embulk/ embulk_gem_install.dig embulk_gems/ params/ scripts/
$ ls embulk/
export_data.yml.liquid import_data.yml.liquid
$ ls embulk_gems/
embulk-output-XXX-0.1.0.gem
$ ls scripts/
embulk_run.sh
daily.dig
!include : params/common/timezone.dig
_export:
!include : params/common/params.dig # embulk_home_dirの定義
+embulk_gem_install:
call>: embulk_gem_install.dig
+import_data:
sh>: scripts/embulk_run.sh ${embulk_home_dir} embulk/import_data.yml.liquid
+export_data:
sh>: scripts/embulk_run.sh ${embulk_home_dir} embulk/export_data.yml.liquid
embulk_gem_install.dig
!include : params/common/timezone.dig
_export:
!include : params/common/params.dig # embulk_home_dirの定義
+mkdir:
sh>: mkdir -p ${embulk_home_dir} # -pをつけているので2回目以降もエラーにならない
+uninstall:
sh>: >-
/usr/local/bin/embulk -J-Duser.home=${embulk_home_dir} gem uninstall --all
+install:
sh>: >-
/usr/local/bin/embulk -J-Duser.home=${embulk_home_dir} gem install
embulk-input-td:0.1.0 # 通常のリポジトリからのインストール
embulk-output-td:0.3.13
embulk-input-sftp:0.2.3
embulk-output-sftp:0.0.9
embulk-filter-column:0.6.0
embulk-filter-timestamp_format:0.2.4
embulk_gems/embulk-output-XXX-0.1.0.gem # ローカルgemのインストール
embulk_run.sh
#!/bin/bash
if [ $# -ne 2 ]; then
echo "Usage: $0 embulk_home_dir embulk_file" 1>&2
exit 1
fi
/usr/local/bin/embulk -J-Duser.home=$1 run $2
exit $?
後日談 - 使えなくなった-J-Duser.homeオプション
0.8.23までは当該オプションで指定したディレクトリにプラグインがインストールされる
0.8.24以降では当該オプションが無視されて$HOMEにインストールされてしまう
0.8.24のリリースノートにあったMake environment variables immutable in JRuby/Java
が原因か