今回はレンタルサーバーで提供されいているGitのバージョンが、
2.3より古い場合の、Gitでデプロイする方法をまとめたいと思います。
自社の環境では、レンタルサーバー上にGit環境を構築して、
bitbucketなどのホスティングサービス上のブランチが更新されたら、
更新内容をpushして、レンタルサーバー上にデプロイしてたりします。
ですが、レンタルサーバー上にインストールされいてるGitのバージョンが2.3より古い場合、
git config receive.denyCurrentBranch updateInstead
の設定が行えないため、
一度レンタルサーバー上のベアリポジトリ経由して、レンタルサーバー上に反映させる必要があります。
ベアリポジトリとノンベアリポジトリの違い、git config receive.denyCurrentBranch updateInstead
の設定の詳細は、以下の素晴らし記事がとても参考になりました。
ベアリポジトリとノンベアリポジトリ:理論編〜GitでWordpressのテーマを管理
Gitがv2.3.0になって、Push to Deployがしやすくなって便利
ここ半年くらいで、デプロイ環境を構築した際に、
以下のサーバーは、Gitのバージョンが2.3より古かったです。
- ヘテムル
- ロリポップ
- エックスサーバー
構築手順
手順内での各種情報
- レンタルサーバーのホスト名 : rental-server
- レンタルサーバーのログインアカウント : rental
- レンタルサーバーのSSHポート : 22
- 任意のディレクトリ : /home/rental/
- ベアリポジトリ用のディレクトリ名 :
bare-dir - ノンベアリポジトリ用のディレクトリ名 : non-bare-dir
- ノンベアリポジトリに反映させたいブランチ : master
- デプロイ方法 : bitbucketのpipeline機能
レンタルサーバー側手順
- レンタルサーバーにSSHでログイン
ssh rental@rental-server -p22 #ssh アカウント名@サーバー名 -pポート番号
- ログイン後、任意のディレクトリに移動し、ベアリポジトリ用のディレクトリと、ノンベアリポジトリ用のディレクトリを作成
cd /home/rental/ #任意のディレクトリに移動
mkdir bare-dir #ベアリポジトリ用のディレクトリを作成
mkdir non-bare-dir #ノンベアリポジトリ用のディレクトリを作成
- ベアリポジトリの初期化
cd /home/rental/bare-dir/ #ベアリポジトリ用のディレクトリに移動
git "init --bare --shared" ##ベアリポジトリの初期化
- post-updateの作成
post-updateはベアリポジトリにプッシュが行われた場合の動作を記述出来るファイルです。
cd /home/rental/bare-dir/hooks/ #post-updateの格納先に移動
cp -p post-update.sample post-update #post-updateのサンプルから複製
- post-updateの編集
#!/bin/sh
branch=$(git rev-parse --symbolic --abbrev-ref $1)
if [ "$branch" = "master" ] #ベアリポジトリにmasterブランチがプッシュされた場合の動作
then
cd /home/rental/non-bare-dir/ #ノンベアリポジトリ用のディレクトリに移動
git --git-dir=.git pull /home/rental/bare-dir/ master #ベアリポジトリからmasterブランチをpull
fi
post-updateの他に、同じhooksディテクトリにあるpost-receiveファイルでもプッシュ時の動作を記述することが出来ます。
が、post-updateの方が、pushされた際のブランチ毎に動作を分けて記述出来ます。
※デモサイトと本番サイトの公開ディレクトリがレンタルサーバー内に存在した場合、developブランチはデモサイト用の公開ディレクトリに反映させて、masterブランチは本番公開用のディレクトリに反映させたり出来ます。
- ベアリポジトリをノンベアリポジトリにclone
cd /home/rental/non-bare-dir/ #ノンベアリポジトリ用のディレクトリに移動
git clone /home/rental/bare-dir/ #ベアリポジトリ用からクローン
mv ./bare-dir/* ./ #ベアリポジトリのファイルを移動
rm -fr ./bare-dir #クローンしてきたベアリポジトリ用のディレクトリを削除
これでレンタルサーバー側の設定は終わりになります。
bitbucketからのデプロイ
bitbucketのpipeline機能を使って、該当のリポジトリにプッシュするには、
以下の記事が参考になるかと思います。
記事内にあるbitbucket-pipelines.yml
と、各種変数設定を今回用に書き換えた場合、
以下のようになります。
pipelines:
branches:
master:
- step:
deployment: production
script:
- git remote add prod ssh://$PROD_SSH_USER@$PROD_SSH_SERVER:$PROD_SSH_PORT/$PROD_SOURCE_DIR
- git fetch
- git push prod master
まとめ
レンタルサーバーによって、Gitのバージョンに違いがありますが、
プランの記述などを見ても、バージョンについての記述はほとんど書かれていないため、
構築時の参考になれば幸いです。
他にもレンタルサーバーの契約によっては、SSHが使えない場合などもありますので、
その場合の対応なんかも、別の機会にまとめてみたいと思います。