gitを使用したリモートプッシュによる自動デプロイ

  • web
  • 2018.09.26
  • nisshi No.000139

hetemlでリモートの管理リポジトリへプッシュし、公開リポジトリへ自動pullするための設定。
何度もやる作業でないため、度々忘れてググる羽目になるのでメモ。

hetemlへのssh接続

まずこれが最初のど忘れポイント。
下記ですね。

ssh -p 2222 [heteml account]@ssh[number].heteml.jp

秘密鍵・公開鍵で接続する場合下記参照。

ssh heteml

でログインできる。

[hetemlで公開鍵を使う方法 – Qiita](https://qiita.com/ikedahidenori/items/64c9eb82b5b44f735a4b)
[SSHなるものをよくわからずに使っている人のための手引書 – Qiita](https://qiita.com/kenju/items/b09199c4b3e7203a2867)

ディレクトリ構成

自分の環境では下記のようにしている。

~/git/project.git – 管理リポジトリ(push先)
~/web/project/ – 公開リポジトリ

管理リポジトリの作成

ssh接続後、管理リポジトリを作成。

cd ~/git/
mkdir project
cd project
git init –bare –shared

公開リポジトリの作成

次に、web公開領域へ管理リポジトリをclone

cd ~/web/
git clone ../../git/project

hookを設定

[Git – Git フック](https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF)

hookとはつまりgit上で特定のアクション(今回はpush)を行った際に追加で走らせるスクリプト。
リモートpush時に発生するhookには下記3種類がある。
pre-receive : push実行前に処理(ユーザチェック処理等)
post-receive:push実行後に処理(通知処理等)
update:pre-receiveをブランチごとに実行

今回はpost-receiveを設定する。

#!/bin/sh

cd ~/web/project; //公開ディレクトリへ移動し
git –git-dir=.git pull //管理ディレクトリからpull

–git-dir= はgitディレクトリ外からコマンド実行する際のおまじない。

[Gitディレクトリ外からgitコマンドを実行する – Qiita](https://qiita.com/paty-fakename/items/d592806b6a4d5d2a4b55)

gitバージョンにより2通り書き方があるようだが、
hetemlの現在のgitバージョンは1.7.1のため、上記の通りになる。

また、忘れがちだがpost-receive は実行形式でなければならない
chmod a+x post-receive

ローカルリポジトリ

リポジトリ作成は省略。
先程設定したリモートの管理リポジトリへのパスは下記の書式。

ssh://[hetemlaccount]@ssh[number].heteml.jp:2222/home/sites/heteml/path/to/home/git/project.git

あとはリモートへpushすればOK。