LoginSignup
1
2

More than 5 years have passed since last update.

Digdagからsh>でEmbulk起動時にプラグインバージョンを固定(ローカルgemあり版 ver.2)

Last updated at Posted at 2017-07-10

以前に書いた記事 の改良版

基本的な考え方

Embulkが提供しているbundle機能を使う
ローカルgem展開ディレクトリをGemfileの:pathで指定する
bundleディレクトリもローカルgem展開ディレクトリもサーバ間でNFS共有する → 理由

前準備

digdagサーバにpushするプロジェクトディレクトリ内にローカルgemを持っておく

[vagrant@digcl proj1]$ embulk --version
embulk 0.8.26
[vagrant@digcl proj1]$ digdag version
2017-07-10 11:27:57 +0900: Digdag v0.9.12
Client version: 0.9.12
Server version: 0.9.12
[vagrant@digcl proj1]$ ls -F
embulk/  embulk_local_gems/  params/  proj1.dig  scripts/
[vagrant@digcl proj1]$ ls -F embulk_local_gems/
embulk-input-XXX-0.2.0.gem

各ファイルの内容

proj1.dig

+embulk_gem_install:
  sh>: scripts/embulk_gem_install.sh

+task1:
  sh>: scripts/embulk_run.sh embulk/task1.yml.liquid

scripts/embulk_gem_install.sh

#!/bin/bash

# エラー処理
function error() {
  exit 1
}

# ローカルgemを展開
gem unpack embulk_local_gems/* --target=<NFS>/proj1/embulk_local_gems || error

# embulk mkbundle実行
if [ ! -e ${embulk_bundle_dir} ]; then
  embulk mkbundle <NFS>/proj1/embulk_bundle || error
fi

# Gemfile上書き
cp -f params/embulk/Gemfile <NFS>/proj1/embulk_bundle || error

# embulk bundle実行
cd <NFS>/proj1/embulk_bundle || error
embulk bundle || error

exit 0

毎回やるのは無駄な内容ではあるが許容する

params/embulk/Gemfile

source 'https://rubygems.org/'
gem 'embulk',            '~> 0.8.0'
gem 'embulk-output-td',  '=  0.4.0'
gem 'embulk-input-XXX',  '=  0.2.0', :path => '../embulk_local_gems/embulk-input-XXX-0.2.0'

ローカルgemは:pathで展開ディレクトリを指定(相対パス可)
展開ディレクトリの内容がbundleディレクトリにコピーされたりはしない(embulk run時に展開ディレクトリを参照する)

scripts/embulk_run.sh

#!/bin/bash

if [ $# -ne 1 ]; then
  echo "Usage: $0 embulk_file" 1>&2
  exit 1
fi

embulk run --bundle <NFS>/proj1/embulk_bundle $1
exit $?

以上

1
2
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
1
2