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]:

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧