デプロイツール「Cinnamon」を使ってみた

@nqounetです。

Kansai.pmで@shiba_yu36さんが発表していた「Cinnamon」が便利そうだったので、使ってみました。

そのあと、sshでサーバーにログインして、公開しているディレクトリに移動して、pullしてから、サーバーを再起動、という操作を行なっていました。

サーバーは1つなので、特に面倒でも無いですが、1分程度は張り付いて作業する感じではありました。

まずはCinnamonをインストールします。

CinnamonはCPANに上がっているので、cpanmなどでインストールが可能です。

1
$ cpanm Cinnamon

依存関係のモジュールも自動的にインストールしてくれるので、簡単です。

インストールが完了すると、「cinnamon」というコマンドが実行できるようになります。

このコマンドを実行すると、そのディレクトリから見て「config/deploy.pl」というファイルを自動的に読み込んでくれるので、gitで管理している場合は、プロジェクトのホームディレクトリからみて、「config/deploy.pl」になるように設定ファイルを作成すると便利です。

細かい書き方は、@naoyaさんのブログか、@shiba_yu36さんのスライド資料などを見ながら書くと良いでしょう。

私は「.ssh/config」にusernameも指定してありますが、必須項目らしいのでuserもsetしておきます。

そもそもsudoが出来ない場合はsudoできるようにする必要があります。

それでもエラーになる場合は、tty経由でしかsudo出来ないようになっている可能性があるので、その設定を解除します。

*TTY経由でないsudoの実行 - shibainu55日記

具体的には、rootになってからのvisudoで、

1
Defaults    requiretty

になっている部分をコメント(先頭に「#」を入力)にして無効にします。

うまくいく例

remote { sudo qq{cd /var/www/myapp && git fetch origin && git checkout -q origin/master}; } $host;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
もしも、複雑な処理が必要であれば、シェルなどでスクリプトを作成して、そのスクリプトを実行するようにしても良いでしょう。
<h3>hypnotoadが見つからない</h3>
「hypnotoad」にかぎらず、PATHが通っていない場合があります。

コマンドをフルパスで書くか、特にperlbrewについては、perlbrewのbashrcを読み込む必要があります。
<h2>とあるdeploy.pl</h2>
それらを踏まえて(sudoはありませんが)作成した「config/deploy.pl」がこちらです。

@argsは要らなさそうなのですが、とりあえずつけています。
```text
use utf8;
use v5.12;
use Cinnamon::DSL;

set user => 'nqounet';
set application => 'myapp';
set deploy_to => '/home/nqounet/www/myapp';

role production => 'sakura.nqounet';

task update => sub {
  my ($host, @args) = @_;
  my $deploy_to = get('deploy_to');
  my $app = get('application');
  remote {
    run qq{. ~/perl5/perlbrew/etc/bashrc &amp;&amp; cd $deploy_to &amp;&amp; git fetch origin &amp;&amp; git checkout -q origin/master &amp;&amp; hypnotoad script/$app};
  } $host;
};

task restart => sub {
  my ($host, @args) = @_;
  my $deploy_to = get('deploy_to');
  my $app = get('application');
  remote {
    run ". ~/perl5/perlbrew/etc/bashrc &amp;&amp; cd $deploy_to &amp;&amp; hypnotoad script/$app";
  } $host;
};

そのあと、以下のコマンドを実行。

1
$ cinnamon production udpate

席を立ってトイレに行って戻ってくると、サーバーの再起動まで終わっていました。

これは楽チンですね。

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy