gemを作った時に複数サーバにRundockでシュッとインストールする

概要

gemのツールを作った時、bundle exec rake releaserubygemsにアップロードしてからツールを使う複数のサーバにインストールする際、わざわざAnsibleやChefといった構成管理を使うのも面倒臭かったで、RundeckにビルトインのRake Taskを実装して、使ってみた時の知見

前提

既にbundle exec rake releaserubygemsにアップロードできる環境があるものとします

準備

  • gemspecファイルに以下の1行を追加
spec.add_development_dependency 'rundock'
  • Rakefileファイルに以下の1行を追加
require 'rundock/gem/tasks'
  • パッケージをインストールして確認
$ bundle install
$ bundle exec rake -T
  • 以下の行が表示されればok
rake rundock                   # Run rundock with default configuration
rake rundock:do                # Run rundock with scenariofile.(env:SCENARIO_FILE_PATH)
  • インストール先の設定に以下のようなYAMLファイルを用意します(他にも色々したい場合、仕様はこちら)
# ホスト毎にタスク実行の流れを書く
- target: client-01
  task:
    - gem_install
- target: client-02
  task:
    - gem_install
---
# インストールしたいサーバのsshログイン情報
# sshオプションのport,user,keyは省略可能
client-01:
  host: 192.168.1.11
  ssh_opts:
    port: 22
    user: anyuser
    key: "~/anyuser/id_rsa_any"
client-02:
  host: 192.168.1.12
  ssh_opts:
    port: 22
    user: anyuser2
    key: "~/anyuser/id_rsa_any2"
---
# タスク(gemのインストールの実処理の配列)
gem_install:
  command:
    - "echo \"start: `hostname`\""
    - "sudo gem install <your gem name>"

実行

$ bundle exec rake release
$ bundle exec rake rundock

成功すれば以下の様な結果になるはず

start: client-01
Fetching: your_gem-x.x.x.gem (100%)
Successfully installed your_gem-x.x.x
1 gem installed
start: client-02
Fetching: your_gem-x.x.x.gem (100%)
Successfully installed your_gem-x.x.x
1 gem installed