apatheia.info

rundeckをセットアップして、jenkins上のjava成果物をデプロイする

Published on 03 Jan 2012

rundeck でjenkins上の成果物をデプロイしよう、という話。

rundeck について

公式サイト

ITオペレーションのコンサルやってるDTO Solution(Depops関連の資料とかでよく会社名は見かけますね)が作っているデプロイ用のツール。元々はControlTierっていう管理ツールがあって、そこから分家した。ControlTierはサーバー/クライアントモデルだけど、サーバー側しか用意しなくていいRundeckのほうがお手軽度高い。

複数のサーバーを対象に状態を変更するのが目的で、capistranoとかfabricとかと同じジャンル。GUIで操作するのが特徴なので、webistrano とかに近い。

GUI(笑)みたいに思うかもしれないけど、画面上から履歴が確認できたり、ブラウザがあればどこからでもデプロイ出来るのって、運用の敷居下げるのに貢献してくれると思う。

rundeck 設定

インストール

とりあえずインストールしてみる。以降の説明は、rundeck インストールサーバー、デプロイ対象サーバーともに CentOS 5 の場合。

http://rundeck.org/docs/RunDeck-Guide.html#installing-rundeck , http://kb.dtosolutions.com/wiki/Rundeck_on_CentOS 参照。CentOSならyumで簡単にインストールできる。

$ sudo rpm -Uvh [http://repo.rundeck.org/latest.rpm](http://repo.rundeck.org/latest.rpm)
$ sudo yum install rundeck

まずはインストールされたファイルを確認してみよう。

$ rpm -ql rundeck
$ rpm -ql rundeck-config

以下のようなことがわかる。

起動

さっそく起動してみる。

$ sudo /sbin/service rundeckd start

既定のポートは 4440 なので http://RUNDECK_HOST:4440/ にアクセスしてみる。

ログイン画面

アクセスできなければ、ちゃんと起動出来てるかどうかとか、iptables が邪魔していないかとか確認。この時点ではまだログイン出来ない。

ログインできるようにするために、ユーザーを作る。公式サイトの説明

パスワードのハッシュ化はmd5sumコマンドとかでもいいけど、手順に沿って付属のライブラリ使ってみる。RPMでインストールすると、説明文中の$RUNDECK_BASE相当がないので、読み替えて以下のように実行

$ cd /var/lib/rundeck/
$ java -cp exp/webapp/WEB-INF/lib/jetty-6.1.21.jar:exp/webapp/WEB-INF/lib/jetty-util-6.1.21.jar org.mortbay.jetty.security.Password f440 secret_password
OBF:1vny1vn61unn1z7e1vu91ytc1r3x1xfj1r411yta1vv11z7o1uob1vnw1vn4
MD5:be6cb1069f01cd207e6484538367bd1d
CRYPT:f4Ou7EnVsEzMg

ユーザー一覧に追加

$ sudo vim /etc/rundeck/realm.properties
// 末尾に以下を追加
f440: MD5:be6cb1069f01cd207e6484538367bd1d,admin,user

これで利用可能になった。ユーザー情報を読み込むために、サービス再起動 (今後もユーザー設定の変更ごとに再起動させる)

$ sudo /sbin/service rundeckd restart

アクセス出来るようになったはず。ログインしてみる。

ログイン直後

やりましたね。

プロジェクトの名前はお好きに。SSHのキーについては、RPMインストール時に作られるrundeckユーザーのキーが/home/rundeck/.ssh/rundeck.id_rsaなので、ここにしておくと手間が少なくて済む。他の値については、今回はデフォルトで。

この後説明するホストやジョブはプロジェクト単位で管理していくことになる。

Run

左上のメニューに注目

最初は localhost だけがホストに登録されているから、Run を選択後、真ん中の入力フォームからコマンドを実行してみる。

exec_uname

実行できた。

ホスト追加

ローカルホストにばかりいじっていても不毛なので、ホストを追加していく。ユーザー同様ホストについても設定ファイルを編集する必要がある。

rundeck をインストールしたサーバーで公開鍵をメモ

rundeck$ sudo su - rundeck
rundeck$ cat .ssh/rundeck.id_rsa.pub # 出力結果をメモ

各ホストに作業用ユーザー「deploy」を追加する - パスワード不要でsudo可能。 - パスワードは設定しない - SSH の鍵認証でパスフレーズ無しにログイン可能

以下、デプロイ対象サーバー(仮に192.168.10.10とする)
192.168.10.10$ sudo /sbin/useradd deploy
192.168.10.10$ sudo /usr/sbin/visudo

  // tty が使えないとSSH経由のコマンドに問題が起きるので、無効化する
  Defaults:deploy    !requiretty
  deploy  ALL=(ALL)       NOPASSWD: ALL

192.168.10.10$ mkdir -m 700 /home/deploy/.ssh
192.168.10.10$ sudo vim /home/deploy/.ssh/authorized_keys # rundeck の公開鍵を登録
192.168.10.10$ sudo chown -R deploy.deploy /home/deploy/.ssh

いったん rundeck 側からログインしてみる。

 ここからはまた rundeck をインストールしたサーバーの話
$ sudo su - rundeck
$ touch .ssh/config
$ chmod 600 .ssh/config
$ vim .ssh/config
    このあともがしがしサーバー追加していくので、LAN内のマシンについては指紋チェック無効化しておく
    Host 192.168.*.*
        StrictHostKeyChecking no
$ ssh -i ~/.ssh/rundeck.id_rsa [email protected]

次に設定ファイル編集

$ sudo vim /var/rundeck/projects/example/etc/resources.xml

以下のような行を追加。name, hostname, username 辺りは重要だけど、それ以外は適当に指定。絞り込みの時に使えるので、tags あたりはしっかり入力しておいたほうがいい。
<node name="target1" description="適当" tags="適当" hostname="192.168.10.10" osArch="適当" osFamily="適当" osName="適当" osVersion="適当" username="deploy" />

これで再起動させればrundeck側からホストが操作できるようになっているはず。target1(192.168.115.60), target2(192.168.115.61)を追加して画面から確認してみる。

フィルタ変更

フィルタの変更でとりあえず全部外して、全台表示にする。

フィルタ変更後

確認できた。ここでコマンドを打てば全台に適用される。

ジョブ追加

サーバーがセットアップ出来たので、ジョブを追加していく。メニューからJobsを選択して、New jobをクリックすればいい。全部画面に書いてあるけど、一応説明すると:

サクサク作れるので、必要に応じてがしがし増やしていく。

jenkins との連動

rundeck はjenkinsおよびrundeckプラグインと連動して利用することが出来る。

プラグインはjenkinsのプラグイン管理画面に表示されるので、それを選択するだけでいい。

jenkins から rundeck をキックする

jenkinsでビルド完了→rundeckでデプロイ→jenkinsで統合テスト実施、といった0-clickのデプロイパイプが作れるようになる。0-clickは革命

jenkinsの設定方法はプラグインの説明ページ参照。

rundeck からjenkins上の成果物を選択できるようにする。

rundeckで手動デプロイするとき、成果物名やビルドの名前を選択できるようにする。

jenkins rundeck プラグインは以下を利用出来るようにしてくれる:

rundeck でジョブを実行するとき、ユーザー入力を受け付けることが出来るんだけど、この選択項目には外部から取得したJSONなども設定できる。この機能と先ほどのAPIを組み合わせることで実現出来る。

やってみよう。ジョブの保存画面でオプションを選択。

オプション設定画面

オプション設定画面2

併せて、受け取った値を表示するだけのステップを作ってみる。

ステップ

実行してみよう。最初にビルド番号を聞かれる。

成果物一覧

適当に選んで「Run Job Now」すると、さっき作った変数を表示するだけのスクリプトが動いて、指定した成果物のURLが表示され、連携がうまくいっていたことが確認出来る。

実行結果

詳細なデプロイ手順については、各環境ごとにあるだろうからアレンジしてもらえればと思う。

まとめ

ホストやユーザーの設定をいちいちファイル編集しなくちゃいけなかったりするのが、ちょっとかっこわるいかな。ただ、UIはわかりやすいし、セットアップも簡単なので 、気軽に試してみるといいと思う。