2018年2月5日 • ☕️ 3 min read

Webhook環境構築はこちらへ:Webhookで自動デプロイ–ステップ1

Webhookで簡単デプロイの設定手順はこちらへ:Webhookで自動デプロイ–ステップ2

Webhookで自動デプロイすることが前回まで既にできました。でも、まだ完成とは言えません。

残りの問題

  1. 更新は失敗した場合、どこに引っかかっているかわからない
  2. 設定ファイルさえないので、新しいWebhookを導入する時、gitlab.phpをいじらなければいけないため、人為的なミスが発生する確率は高くなる
  3. LAMP環境とデプロイ用のgitlab.phpなどを1コマンドでデプロイサーバに展開できればいいかなと

問題1

  1. GUIで管理して、履歴をDBへ保存する
  2. ログの追加する

デプロイプロジェクトをGUI化にしたら、そこそこのコストがかかります。 開発、メンテナンスにも手間が必要です。 もし履歴などを(自動テスト結果とかも)管理したければ、Webhookではなく、CI/CDのコストが低く安定性も高いため、選択肢aをパスしました 選択肢2を実装しましょう。

gitlab.php
Copy
function writeLog($logPath, $msg) {
  /* create open log */
  $fs = fopen($logPath, 'a');
  $nowDate = date("Y-m-d H:i:s");
  try {
    fwrite($fs, "[$nowDate]: $msg".PHP_EOL);
  } finally {
    $fs and fclose($fs);
  }
}

問題2

  1. gitlab.phpの自動テストを実装する
  2. env.iniでコントロールする

「こんな簡単なgitlab.phpのためにテストを書いて、毎回編集してテストするもんか」という感じで、2を選びました。

PHPで。iniファイルの読み込みはとりあえず簡単です。

gitlab.php
Copy
$ENV = parse_ini_file('./env.ini', true);

そして、外へ出すべきな変数を洗い出しましょう。

  • セキュリティトークン: token
  • ホワイトIPリスト:allow_ip_list
  • ログファイルパス:log
  • ブランチ:branch

同じフォルダにあるenv.iniを直します。

env.ini
Copy
[security]
;secret token
token="enter_my_security_token"
;space for allow all
allow_ip_list[]=""
[path]
;path
log="./log/webhook.log"
[branch]
;deploy branch
prod="master"

問題3

  1. ansibleで環境構築
  2. shellで環境構築
  3. shellでgitlab.phpをデプロイする

お恥ずかしいですが、ansibleに詳しくないため、1をパスしました。

では方法2環境構築のshellをまとめてみましょう。

Copy
#This shell is created for CentOS7
echo "必須パッケージインストール"
sudo yum install git httpd -y
echo "PHP71インストール"
yes yes | sudo yum install epel-release
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yes yes | sudo yum install --enablerepo=remi-php71 php -y

そして、3. 自動デプロイのshellを作りましょう。

Copy
echo "gitlab-webhookのsourcecodeをダウンロードして配置"
basepath="/var/www"
pjpath="$basepath/gitlab-webhook"
logpath="$pjpath/log"
deploypath="$pjpath/deploy"
if [ -d "$pjpath" ]; then
  # Get newest source
  sudo cd $pjpath
  sudo git checkout master
  sudo git pull https://xxxxxx/gitlab-webhook.git
else
  # first time
  sudo cd $basepath
  sudo git clone https://xxxxxx/gitlab-webhook.git $pjpath
fi
echo "ログフォルダ生成"
if [ -d "$pjpath" ]; then
else
  sudo mkdir $logpath
fi
echo "フォルダ権限調整"
sudo chmod -R 777 $logpath
sudo chmod -R 755 $deploypath
echo "gitlab.confの配置"
sudo cp gitlab.conf /etc/httpd/conf.d/
sudo systemctl restart httpd.service
sudo systemctl enable httpd.service
echo "Firewallに80ポートをオープン"
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

apache用のconfigファイルgitlab.confを作成

Copy
alias /gitlab/ /var/www/gitlab-webhook/
<Directory /var/www/gitlab-webhook/>
  AllowOverride all
  Require all granted
</Directory>

完了

次回はすべてのステップをまとめてみましょう。


関連投稿

GitHub ActionsにてWebサイトをNetlifyへデプロイ

2022年3月6日

Webhookで自動デプロイ–ステップ2

2018年2月2日

ThunderMiracle

Blog part of ThunderMiracle.com