Capstranoでコマンド流してみたーの

少し興味はあったのでちょこっとだけ触ってみようかな。
デプロイツールという事で有名みたいですが、数台のサーバーにコマンドを流すという事もできるらしいので、その辺をやってみようかなと。

最近のお決まりのパターンでコマンドを叩いて各テンプレを作成してもらいます。
Capstrano 2系のHow toサイトを見ていたようでコマンド違うよ~ってのが表示されます。

[takeken@ubuntu]$ capify .
--------------------------------------------------------------------------------
Capistrano 3.x is incompatible with Capistrano 2.x.

This command has become `cap install` in Capistrano 3.x

For more information see http://www.capistranorb.com/
--------------------------------------------------------------------------------.

改めてcap installでテンプレ作成をやってみると2個のディレクトリと5個のファイルが出来上がり。

[takeken@ubuntu]$ cap install
mkdir -p config/deploy
create config/deploy.rb
create config/deploy/staging.rb
create config/deploy/production.rb
mkdir -p lib/capistrano/tasks
create Capfile
Capified

ざっくりと説明を調べてみたところconfig/deploy.rbは共通の設定を書いて、config/deploy直下の各ファイルに各環境でのことを書く。
実行時に指定することが可能。

今回はとりあえず動かしてコマンドを流してみるよという事でconfig/deploy/ope.rbというのを作ってみました。
カレントディレクトを表示して、ファイル一覧を表示するだけです。

[takeken@ubuntu]$ cat config/deploy/ope.rb
task :ls do
        on roles(:ope) do
                execute "pwd"
                execute "ls"
        end
end

対象のサーバーですが、Dockerでsshだけ開いてるコンテナを作成しました。

 Docker file

#
FROM centos:centos6
#
#
RUN yum update -y
RUN yum install -y install openssh-server sudo
#
RUN mkdir -p /var/run/sshd
RUN useradd -d /home/takeken -m -s /bin/bash takeken
RUN echo takeken:takeken | chpasswd
RUN echo 'takeken ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN /etc/init.d/sshd start

5台作成します。

[takeken@ubuntu]$ sudo docker run -d -p 22 demo:demo01 /usr/sbin/sshd -D
8351ce3d52faade30e0bf19d59fd68a80da7e7e23dff8853ab7aedc9d451951e
[takeken@ubuntu]$ sudo docker run -d -p 22 demo:demo01 /usr/sbin/sshd -D
129c6ac0a707506313c897fd5aa442661812986d3bfc1911c5a5c43001d41582
[takeken@ubuntu]$ sudo docker run -d -p 22 demo:demo01 /usr/sbin/sshd -D
fa70f71db09fc439e7bae6a7db5aebdfd5037e144dd022f483b068a22a815263
[takeken@ubuntu]$ sudo docker run -d -p 22 demo:demo01 /usr/sbin/sshd -D
f0f3b56b950b5f2e3c2d7f8669dc525fe68e5c3322f999912634c2a35740e7bd
[takeken@ubuntu]$ sudo docker run -d -p 22 demo:demo01 /usr/sbin/sshd -D
1def3de7c39489fa05a4dd4a485abf83212348f0ed4f2ddc488ea9ad45ec4f5e

config/deploy.rbには共通設定を書くらしく、各サーバーの認証を書きました。
天邪鬼なのでパスワード認証です。

# config valid only for current version of Capistrano
lock '3.3.4'

# Default value for :pty is false
set :pty, true

#set :password, ask('Server password:', nil)
server '172.17.0.2', user: 'takeken', port: 22, password: 'takeken', roles: %w{ope}
server '172.17.0.3', user: 'takeken', port: 22, password: 'takeken', roles: %w{ope}
server '172.17.0.4', user: 'takeken', port: 22, password: 'takeken', roles: %w{ope}
server '172.17.0.5', user: 'takeken', port: 22, password: 'takeken', roles: %w{ope}
server '172.17.0.6', user: 'takeken', port: 22, password: 'takeken', roles: %w{ope}

では最低限ながら準備ができたと思うので実行してみました。

[takeken@ubuntu]$ cap ope ls
INFO[c19bf0a4] Running /usr/bin/env pwd on 172.17.0.4
INFO[99ed9839] Running /usr/bin/env pwd on 172.17.0.6
INFO[63c04ca8] Running /usr/bin/env pwd on 172.17.0.5
DEBUG[c19bf0a4] Command: /usr/bin/env pwd
INFO[f068bcf9] Running /usr/bin/env pwd on 172.17.0.2
INFO[587d697b] Running /usr/bin/env pwd on 172.17.0.3
DEBUG[99ed9839] Command: /usr/bin/env pwd
DEBUG[63c04ca8] Command: /usr/bin/env pwd
DEBUG[f068bcf9] Command: /usr/bin/env pwd
DEBUG[587d697b] Command: /usr/bin/env pwd
DEBUG[63c04ca8]         /home/takekenDEBUG[f068bcf9]    /home/takekenINFO[c19bf0a4] Finished in 0.192 seconds with exit status 0 (successful).

DEBUG[c19bf0a4]         /home/takeken
DEBUG[63c04ca8]
DEBUG[587d697b]         /home/takeken

INFO[c19bf0a4] Finished in 0.192 seconds with exit status 0 (successful).
DEBUG[99ed9839]         /home/takeken
INFO[63c04ca8] Finished in 0.176 seconds with exit status 0 (successful).
INFO[587d697b] Finished in 0.174 seconds with exit status 0 (successful).
DEBUG[f068bcf9]
INFO[35b2672b] Running /usr/bin/env ls on 172.17.0.4
INFO[99ed9839] Finished in 0.178 seconds with exit status 0 (successful).
INFO[00b03ea8] Running /usr/bin/env ls on 172.17.0.5
INFO[d71e4a20] Running /usr/bin/env ls on 172.17.0.3
INFO[f068bcf9] Finished in 0.176 seconds with exit status 0 (successful).
DEBUG[35b2672b] Command: /usr/bin/env ls
INFO[ce5c9979] Running /usr/bin/env ls on 172.17.0.6
DEBUG[00b03ea8] Command: /usr/bin/env ls
DEBUG[d71e4a20] Command: /usr/bin/env ls
INFO[bf16475f] Running /usr/bin/env ls on 172.17.0.2
DEBUG[ce5c9979] Command: /usr/bin/env ls
DEBUG[bf16475f] Command: /usr/bin/env ls
INFO[35b2672b] Finished in 0.029 seconds with exit status 0 (successful).
INFO[ce5c9979] Finished in 0.026 seconds with exit status 0 (successful).
INFO[bf16475f] Finished in 0.026 seconds with exit status 0 (successful).
INFO[00b03ea8] Finished in 0.030 seconds with exit status 0 (successful).
INFO[d71e4a20] Finished in 0.029 seconds with exit status 0 (successful).

結果はどうやら上手くいったようですが、5台に一気にやるのでごちゃごちゃして訳が分かりませんな。選んだコマンドが良くなかったようです。
シェルスクリプトを実行してみようと、やってみましたがGitHubからスクリプトを取ってくるところだったり、実行がうまくいかなかったりと今のところはサクッと完了できなかったので、今回はひとまずこれで完了します。

参考サイト

入門 Capistrano 3 ~ 全ての手作業を生まれる前に消し去りたい | GREE Engineers’ Blog:

 

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *