Worker で利用するライブラリが更新されたときに必要なこと

Worker で利用する magellan-railsmagellan-publisher などのライブラリが更新されたときは、次の手順で Worker を更新する必要があります。

この手順は、MAGELLAN 提供外の利用ライブラリが更新されたり、利用するライブラリを新しく追加するときにも必要となります。

1. 利用ライブラリの更新

まず、利用しているライブラリを更新します。

ここでは、Bundler を利用してライブラリを管理しているケースについて記述しています。Bundler 管理外のライブラリについては、その利用状況に応じて適切に更新してください。

Gemfile 中の更新が必要なライブラリの記述を見直し、必要があれば適切な記述に変更します。

マイナーアップデートのみの対応としたい場合は、当該ライブラリ名に続けて、, '~> 1.5.0' のように記述します。この例の場合は、’sample-library’ のバージョンが 1.5.0 より大きく、1.6.0 より小さい場合に、インストールされます。なお、sample-library は、架空のライブラリです。

gem 'sample-library', '~> 1.5.0'

特定バージョン以降の対応としたい場合は、当該ライブラリ名に続けて、, '>= 1.5.0' のように記述します。この例の場合は、sample-library のバージョンが 1.5.0 以上の場合に、インストールされます。

gem 'sample-library', '>= 1.5.0'

特定のバージョンのみの対応としたい場合は、当該ライブラリ名に続けて、, '1.5.0' のようにバージョン番号のみを記述します。

gem 'sample-library', '1.5.0'

次のようにバージョンを指定しない記述もできます。最初に bundle install した時点での最新バージョンとなります。ただし、当該ライブラリと他ライブラリとの依存関係によっては、最新ではなく古いバージョンが適用される場合もあります。このように、場合によってはバージョンが不定となるため、この記述方法はお勧めしません。

gem 'sample-library'

Gemfile の見直しが済んだら、bundle install コマンドを実行して、当該ライブラリをインストールします。

$ bundle install

GitSubversion などのバージョン管理システムでソースコードを管理している場合は、Gemfile 及び Gemfile.lock をコミット(チェックイン)してください。

2. Docker イメージの更新

次に、Docker イメージを再ビルドし、Docker レジストリに登録します。

次の例は、yourname/rails-worker-example:0.0.2 という Docker イメージを更新する例です。Docker イメージを更新する際は、必ずイメージ名を変更してください。慣例として、イメージ名のタグ(この例だと 0.0.2 の部分)をバージョン番号として扱い、バージョン番号を新しい番号へと更新します。

例えば、0.0.2 であれば、0.0.30.1.0 などにします。ここでは、0.0.3 とした場合の例で記述しています。

$ docker build -t yourname/rails-worker-example:0.0.3 .
$ docker push yourname/rails-worker-example:0.0.3

3. Worker の更新

最後に、MAGELLAN 上で動作している Worker を更新します。

大まかな流れとしては、Worker 登録時の Docker イメージ名を更新し、Worker を再起動します。

まず、準備として、ログインからステージの選択までを済ませておきます。magellan-cli loginyourname@example.jpsecret は、MAGELLAN 登録時のメールアドレスとパスワードに読み替えてください。また、MyOrgMyProjectMyStage は、更新する Worker が所属する組織名、プロジェクト名、ステージ名に読み替えてください。

$ magellan-cli login
email: yourname@example.jp
password: secret
ログインしました
$ magellan-cli organization select MyOrg
$ magellan-cli project select MyProject
$ magellan-cli stage select MyStage

続いて、Worker 登録時の Docker イメージ名を更新します。

$ magellan-cli worker select MyWorker
$ magellan-cli worker update '{"image_name":"yourname/rails-worker-example:0.0.3"}'
$ magellan-cli worker prepare_images

Worker を再起動します。

$ magellan-cli stage prepare
$ magellan-cli stage release_now