Cinnamon入門の入門

Published: 2016年9月25日 by tomsato

概要

シンプルなデプロイツールとして知られているCinnamonについて

デプロイツールとしてはCapistranoが定番として知られているらしいがRailsを前提としていたり、汎用的な反面裏で何をやっているのかわかりづらい

Cinnamonのメリットとしては

  • シンプル
  • Role/Task (後述)
  • 学習コストが低い
  • (Perlで記述する)

があるので少し触ってみる

Role/Taskの概念

デプロイツールとして必要になるRole/Taskの概念について

cinnamon01

例えば

サーバA、B、Cに「production」というRoleを定義
またyum installでsetupしていく「setup」というTaskを定義する

「production」サーバ群が「setup」Taskを実行していく

などRoleがTaskを1つ以上選択して順に実行していく概念のこと

導入

導入環境

$ cat /etc/redhat-release
CentOS release 6.8 (Final)

Perl-5.14.2を導入する
※ Perl最新版である5.24.0やOS標準の5.10.1などではうまく導入できなかったので今回は5.14.2を導入する

perlのバージョンの違いについて
https://ja.wikipedia.org/wiki/Perl

$ wget http://www.cpan.org/src/5.0/perl-5.14.2.tar.gz
$ tar xvfz perl-5.14.2.tar.gz
$ cd perl-5.14.2
$ sh Configure -des -Dusethreads -Dinc_version_list=none
$ make
$ make test
$ sudo make install

古いperlを退避させて新しいperlを所定の場所に置く

$ cd /usr/bin/
// 古いバージョンのperlを退避
$ sudo mv perl perl-5.x.x
$ sudo ln -s /usr/local/bin/perl .

// 新しいバージョンになっていることを確認する
$ perl -v
This is perl 5, version 14, subversion 2 (v5.14.2)

Cinnamonを入れるためにcpanmを用意する

$ cd /usr/bin/
$ sudo curl -LOk http://xrl.us/cpanm
$ sudo chmod +x cpanm

Cinnamonのインストール

$ sudo cpanm Cinnamon

Hello World

usage

$ cinnamon --help
Usage: cinnamon [--config=<path>] [--set=<parameter>] [--ignore-errors] [--help] [--info] <role> <task ...>

以下のファイルを用意する
引数で指定しない場合はconfig/deploy.plが読まれる

$ cat config/deploy.pl
use strict;
use warnings;
use Cinnamon::DSL;

# 全taskから参照できる
set hello => 'Hello World!!';

# roleの定義
role development => [
	# カンマ区切りで複数のサーバを記述できる
	'localhost',
], {
	# ここで定義したものをtaskに渡すことができる
	# setで定義したものを上書きできる
	hoge   => 'hoge',
};

task deploy  => {
	hollo_world => sub {
		my ($host) = @_;
		remote {
			run "hostname";
			run "echo 1:".$host;
			run "echo 2:".get('hello');
			run "echo 3:".get('hoge');
		} $host;
	},
};

roleとtaskをそれぞれ記述している

実行してみる

$ cinnamon development deploy:hollo_world
[localhost :: executing] hostname
[localhost :: stdout] 80ff4e833e50
[localhost :: executing] echo 1:localhost
[localhost :: stdout] 1:localhost
[localhost :: executing] echo 2:Hello World!!
[localhost :: stdout] 2:Hello World!!
[localhost :: executing] echo 3:hoge
[localhost :: stdout] 3:hoge

========================
[success]: localhost
[error]:

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧