テストサイトにCI環境を使わずに数秒でアップロードする環境を作ってみた。

webのテスト環境で困ったことありませんか?

 

ftpだとソフトを起動したり接続先のサーバーを選択してアップロードするので少し時間がかかります。

 

gitはhookを使ってサイトを更新・アップロードすることはできます。

 

ただタスクランナーの設定ファイルやsrcディレクトリも管理対象に入れているのでhookを使ったやり方だとちょっとなんだかなーという感じです。

 

gulpのプラグインにsftpでアップロードできるようにするパッケージがありますが、やり方が悪かったのか動きませんでした。

 

そこでrsyncを使ってテストサイトにdistディレクトリの中だけアップロードするshell scriptを作りました。

 

ssh接続ができることが前提条件になります。

 

やりたいことはこんな感じになります。

 

shellスクリプトで設定ファイルを作成

設定ファイルがカレントディレクトリにある場合は設定ファイルに従いrsyncでdistの中を指定の場所にアップロード

もしも設定ファイルがない場合はエラーを表示して設定ファイルの作成を促す。

 

コード

=====================

#!/bin/sh

 

# 設定ファイルをこのように設定してください

#

# 接続先のサーバー情報

# SERVER=hoge

# openDir=hoge

 

if [ -r ./.web_config ]; then

   source ./.web_config

fi

 

yn(){

 read -p ‘実行しますか? [y/n]’ yn

 case $yn in

   [Yy] ) break;;

   * ) echo “実行をキャンセルしました。”; exit ;;

 esac

}

 

ls_dir(){

 #サーバー側のディレクトリを見る

 echo “

 ${1:-$openDir}ディレクトリ

 —————————-

 “

 ssh $SERVER command “cd ${1:-$openDir};ls”

 echo “

 —————————-

 “

}

 

init(){

cat <<EOF > .web_config

SERVER=${1}

dir=${2}

copyDir=${3}

EOF

}

 

up(){

 rsync -truvpz ./${copyDir}/ $SERVER:~/${openDir}/${dir}

 echo “変更を反映しました。”

 echo “http://test.timeair.jp/${dir}/”

}

 

remove(){

 ssh $SERVER command “

 cd ~/${openDir};

 rm -rf $1;

 “

 echo “${1}を削除しました。”

}

 

help(){

 echo “

 htmlのテストサイトを自動公開するシェルスクリプトです。

 引数として[]内の文字を入力してください。

 

 [メニュー]

 

 設定         : [init]

 アップロード  : [up]

 削除         : [remove]

 “

 ls_dir

}

 

#==================================

# 判定・処理

#==================================

case “$1” in

 “init”)

   if [ ! -r ./.web_config ]; then

       ls_dir

       read -p “公開先のディレクトリ名 : ” dir

       read -p “接続サーバー名        : ” server

       read -p “公開するディレクトリ   : ” copyDir

       yn

       init ${server} ${dir} ${copyDir}

       echo “設定完了”

   else

       echo “エラー! ファイルが存在します。”

   fi

   ;;

 “up”)

   if [ -r ./.web_config ]; then

       echo “upしますか?”

       yn

       up

   else

       echo “エラー! ファイルが存在しません”

   fi

   ;;

 “remove”)

   ls_dir

   read -p “削除する確認用サイトを入力してください : ” dir

   echo “${dir}のsiteを削除しますか?”

   yn

   remove ${dir}

   ;;

 *)

   help

esac

 

=====================

 

出来上がったツールはこんな感じです。

 

 

shellにログインします。

何もないところからスタートしています。

ディレクトリを作成します。

確認のときに「デモ」と表示されるようにしました。

アップロードするファイルを作ります。デモなので適当です。

設定ファイルを作ります。

いろいろ聞かれるので、入力していきます。

※一部表示を消しています。

設定ファイルが作成されました。

アップしてみます。

これでテストサイトが公開されました。

 

設定ファイルがあるので[site up]だけでこれ以降は更新が完了します。アップが無事完了したか見てみましょう。

先程作ったhtmlが表示されています。完成です。

 

まとめ

 

rsync早い!半端ない!

 

CI環境があるのが一番いいと思いますけど。

 

CI環境がない方は試してみてはいかがでしょうか?

関連記事

engage