

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

弊社のコーディング代行サービスでは、GitLabを使い、ソースコードを管理しています。
お客様への確認用に、テストサーバにファイルをアップしているのですが、これが手作業でのアップロードだと、非常に手間ですので、GitにPushしたデータを自動でテストサーバにアップロードするプログラムを作成したので、備忘録も兼ねて記載します。
1.GitのSSHのURLを、データベースに登録
2.そのデータベースに登録されたGitのSSHを、定期的にApache上でCloneもしくは、Pullして、サーバ上にファイルを展開
するというものです。
まずは、Apache上でCloneできるようにするために、Apacheの実行ユーザと同じ名前のGitLabアカウントを作成
キーペアを作成して、公開鍵をGitLabに登録。秘密鍵は、実行ユーザのhomeディレクトリに、.ssh/フォルダを作成してそちらにアップロードします。
そうすることによって、公開鍵認証で、GitLabにアクセスできるようになります。
/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ができるようになります。
お客様への確認用に、テストサーバにファイルをアップしているのですが、これが手作業でのアップロードだと、非常に手間ですので、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ができるようになります。
CATEGORY
関連記事
2021.01.10 動画制作
After Effectsでアニメーションをループさせる
2021.01.10 動画制作
Premiere Proでぼかしをトラッキングする
2021.01.10 動画制作
Premiere Proで作成した映像をMedia Encoderで書き出すとLUTが反映されていない時の解決方法
2021.01.10 動画制作
Premiere Proでモーションブラーをかける
2021.01.10 動画制作
Premiere ProにLUTを追加する
2020.11.25 PHPプログラム
Instagram Graph APIを使ってインスタグラムの投稿画像をWebサイトに埋め込む方法1