STAFF BLOG STAFF BLOG

STAFF BLOG

2020.05.25 PHPプログラム

GITにPUSHしたソースを、シェルスクリプト を使って自動デプロイ環境構築

GITにPUSHしたソースを、シェルスクリプト を使って自動デプロイ環境構築
弊社のコーディング代行サービスでは、GitLabを使い、ソースコードを管理しています。
お客様への確認用に、テストサーバにファイルをアップしているのですが、これが手作業でのアップロードだと、非常に手間ですので、GitにPushしたデータを自動でテストサーバにアップロードするプログラムを作成したので、備忘録も兼ねて記載します。

Apacheの実行ユーザと同じ名前のGitLabアカウントを作成

このプログラムの全体像としては、
1.GitのSSHのURLを、データベースに登録
2.そのデータベースに登録されたGitのSSHを、定期的にApache上でCloneもしくは、Pullして、サーバ上にファイルを展開

するというものです。
まずは、Apache上でCloneできるようにするために、Apacheの実行ユーザと同じ名前のGitLabアカウントを作成
キーペアを作成して、公開鍵をGitLabに登録。秘密鍵は、実行ユーザのhomeディレクトリに、.ssh/フォルダを作成してそちらにアップロードします。
そうすることによって、公開鍵認証で、GitLabにアクセスできるようになります。

Apacheの設定

弊社のテストサーバで、
/var/www/fog/html/○○/
のディレクトリにアップロードすると、勝手に下記のURLで表示されるよう、ApacheのVirtualHostの設定をします。
https://○○.demo.fog.tokyo/
/etc/httpd/のconfファイルに追記


<virtualhost :80="">
<div class="hcb_wrap">
<pre class="prism undefined-numbers lang-bash" data-lang="Bash">DocumentRoot /var/www/fog/html/
ServerName demo.fog.tokyo
ServerAlias demo.fog.tokyo *.demo.fog.tokyo
VirtualDocumentRoot /var/www/fog/html/%1/
# Other directives here</pre>
</div>
</virtualhost>

追記後、Apache再起動

# service httpd restart
こうすることで、

/var/www/fog/html/○○/
のディレクトリにアップロードすると、勝手に下記のURLで表示されるようになります。
https://○○.demo.fog.tokyo/
<h2>シェルスクリプトの作成</h2>
下記のシェルスクリプトを、
/var/www/fog/html/
の公開ディレクトリ直下に配置します。


#############ここから#############

# デプロイするプロジェクトの名前
proj_name=$1

# リモートリポジトリのURL
remote_path=git@○○○○/$1.git

# デプロイするブランチ
branch=$2

# 本番環境へのSSHログイン情報(ユーザ名@ホスト名)
host=git@○○○○

#############ここまで#############

# プロジェクトのディレクトリがあるか確認
# なければclone、あればpullをおこなう
if [ ! -e ${proj_name} ]; then
git clone ${remote_path}
echo 'cloning success!'
else
cd ${proj_name}
# pullもしくはfetch&reset --hardを使う
# 競合を起こさないよう、強制的に最新のリモートリポジトリに合わせる
git fetch origin
git reset --hard origin/${branch}
# git pull origin ${branch}
echo 'deployment success!'
fi
PHPの、exec()関数を使って、上記で記載したシェルスクリプトを実行することで、自動で、Clone及びpullができるようになります。

関連記事