Webhook環境構築はこちらへ:Webhookで自動デプロイ–ステップ1
Webhookで簡単デプロイの設定手順はこちらへ:Webhookで自動デプロイ–ステップ2
Webhookで自動デプロイすることが前回まで既にできました。でも、まだ完成とは言えません。
残りの問題
- 更新は失敗した場合、どこに引っかかっているかわからない
- 設定ファイルさえないので、新しいWebhookを導入する時、gitlab.phpをいじらなければいけないため、人為的なミスが発生する確率は高くなる
- LAMP環境とデプロイ用のgitlab.phpなどを1コマンドでデプロイサーバに展開できればいいかなと
問題1
- GUIで管理して、履歴をDBへ保存する
- ログの追加する
デプロイプロジェクトをGUI化にしたら、そこそこのコストがかかります。 開発、メンテナンスにも手間が必要です。 もし履歴などを(自動テスト結果とかも)管理したければ、Webhookではなく、CI/CDのコストが低く安定性も高いため、選択肢aをパスしました 選択肢2を実装しましょう。
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
- gitlab.phpの自動テストを実装する
- env.iniでコントロールする
「こんな簡単なgitlab.phpのためにテストを書いて、毎回編集してテストするもんか」という感じで、2を選びました。
PHPで。iniファイルの読み込みはとりあえず簡単です。
gitlab.php
$ENV = parse_ini_file('./env.ini', true);
そして、外へ出すべきな変数を洗い出しましょう。
- セキュリティトークン: token
- ホワイトIPリスト:allow_ip_list
- ログファイルパス:log
- ブランチ:branch
同じフォルダにあるenv.ini
を直します。
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
- ansibleで環境構築
- shellで環境構築
- shellでgitlab.phpをデプロイする
お恥ずかしいですが、ansibleに詳しくないため、1をパスしました。
では方法2環境構築のshellをまとめてみましょう。
#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を作りましょう。
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>
完了
次回はすべてのステップをまとめてみましょう。