0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

デザイントランスメディアAdvent Calendar 2019

Day 12

Gitのバージョンが2.3より古いレンタルサーバーにGitでデプロイする

Last updated at Posted at 2019-12-12

今回はレンタルサーバーで提供されいている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の編集
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を試してみる

記事内にあるbitbucket-pipelines.ymlと、各種変数設定を今回用に書き換えた場合、
以下のようになります。

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

pipeline.jpg

まとめ

レンタルサーバーによって、Gitのバージョンに違いがありますが、
プランの記述などを見ても、バージョンについての記述はほとんど書かれていないため、
構築時の参考になれば幸いです。

他にもレンタルサーバーの契約によっては、SSHが使えない場合などもありますので、
その場合の対応なんかも、別の機会にまとめてみたいと思います。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?