February 5, 2018 • ☕️ 4 min read

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

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

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

残りの問題

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

問題1

a. GUIで管理して、履歴をDBへ保存する

b. ログの追加

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

gitlab.php

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

a. gitlab.phpの自動テストを実装する

b. env.iniでコントロールする

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

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

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

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

・ セキュリティトークン: token

・ ホワイトIPリスト:allowiplist

・ ログファイルパス:log

・ ブランチ:branch

同じフォルダのenv.ini

[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

a. ansibleで環境構築

b. shellで環境構築

c. shellでgitlab.phpをデプロイする

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

ではb.環境構築のshellをステップ1からまとめましょう:

#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

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

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を作成

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

完了

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


関連投稿

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

February 2, 2018

Blog part of ThunderMiracle.com