てきとうなさいと べぇたばん

このサイトのデプロイにはFabricに任せることにしました

デプロイもAnsibleにしようか…

DevOpsにすることはできた。とはいえ、デプロイがまだである。一つのコマンドで本番反映されてほしい。

ツール

調べてみると、デプロイツールにはCapistranoとFabricが主流?のようだ。

Capistrano

Rubyでできている。見てみた感じ、簡単そう。

Fabric

Pythonでできている。

Fabricにした理由

Python製であるAnsibleを使っていることから、同じPython製のFabricに任せたほうがいいかなというだけ。特に理由はなし。どっちも良さそうだったし。

コード

以下のコードを書く。

$ cat fabfile.py
# -*- coding: utf-8 -*-
from fabric.api import local, settings, abort, run, cd, env, hosts

# コレはただのテスト
def hello():
    print("Hello World!")

# originの設定を行う
def init_origin():
    local("git remote remove origin")
    local(“git remote add origin host_dev1:path/to/repo“)

# デプロイを行う
@hosts(“host_dev1")
def deploy():
    # ssh_configを使えるようにする
    env.use_ssh_config = True

    local("git push origin master")
    # 文字通りcd
    with cd(“path/to/”):
        # 本番環境へgit pullする
        run("git pull origin master")

fabfile.pyというファイルを置いてコミット、それをデプロイしてみる。

$ fab deploy
[host_dev1] Executing task 'deploy'
[localhost] local: git push origin master
Counting objects: 3, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 373 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To host_dev1:path/to
   da7c10f..29fc19d  master -> master
[host_dev1] run: git pull origin master
[host_dev1] out: remote: Counting objects: 3, done.
[host_dev1] out: remote: Compressing objects:  33% (1/3)
[host_dev1] out: remote: Compressing objects:  66% (2/3)
[host_dev1] out: remote: Compressing objects: 100% (3/3)
[host_dev1] out: remote: Compressing objects: 100% (3/3), done.
[host_dev1] out: remote: Total 3 (delta 2), reused 0 (delta 0)
[host_dev1] out: Unpacking objects:  33% (1/3)
[host_dev1] out: Unpacking objects:  66% (2/3)
[host_dev1] out: Unpacking objects: 100% (3/3)
[host_dev1] out: Unpacking objects: 100% (3/3), done.
[host_dev1] out: From /path/to/repo
[host_dev1] out:  * branch            master     -> FETCH_HEAD
[host_dev1] out:    da7c10f..29fc19d  master     -> origin/master
[host_dev1] out: Updating da7c10f..29fc19d
[host_dev1] out: Fast-forward
[host_dev1] out:  fabfile.py | 1 +
[host_dev1] out:  1 file changed, 1 insertion(+)
[host_dev1] out:


Done.

追記

shipitという、りすさんを紹介してもらった。かわいい