とーますメモ

Ruby on Rails / Goなどの学習メモ

【Go入門】デプロイツール「sup」の使い方

自分用メモ。

RailsならCapistranoが有名だが、Goでも同じようなツールがないか調べてみたところ
このツールが検索に引っかかったので、使い方を調べてみた。

ツール名は「sup」。
github.com

特徴は、YAML形式の設定ファイルに対象ホストやコマンドを自分で記述して
デプロイを行うこと。また1回のコマンドで複数ホストにデプロイすることも可能。

使用方法は以下。

インストール

$ go get -u github.com/pressly/sup/cmd/sup

動作確認

$ sup -v

使い方

$ sup [OPTIONS] NETWORK COMMAND [...]

NETWORKに、設定ファイルに記述した「ネットワーク名」を指定し
COMMANDに、設定ファイルに記述した「コマンド名」を指定する。

設定ファイルを作成

Supfile」という名前ファイルをルートに作成。
envの箇所で環境変数を設定。
例ではPRODUCTION_DSTはデプロイ先のディレクトリを指定し、
hosts:ではホスト毎の情報(USER@HOST:PORT)を設定する。

以下設定例。

version: 0.4

env:
  # Environment variables for all commands
  NAME: example
  PRODUCTION_DST: /home/xxx/go_deploy

networks:
  # Groups of hosts
  dev:
    hosts:
      - localhost
  staging:
    hosts:
      - USER@HOST:PORT
  production:
    hosts:
      - USER@HOST:PORT

commands:
  start-echo:
    desc: start message
    run: echo [START] $NAME HOST[$SUP_NETWORK]

  end-echo:
    desc: ending message
    run: echo [END] $NAME HOST[$SUP_NETWORK]

  # Named set of commands to be run remotely
  ping:
    desc: Print uname and current date/time.
    run: uname -a; date

  pre-build:
    desc: Initialize directory
    run: mkdir -p $PRODUCTION_DST

  upload:
    desc: Upload dist files to all hosts
    upload:
      - src: ./
        dst: $PRODUCTION_DST

targets:
  deploy:
    - start-echo
    - pre-build
    - upload
    - end-echo

上記の例では
targetsに「deploy」を設定し
一括で処理したいショートカットを設定している。

なので以下のようにコマンドを打つと、一気に4つの処理が同時に走る。

$ sup production deploy

この状態だけだと、ただデプロイしてるだけなので
ビルドから実行までのタスクも次回は書きたい。