公開鍵使ってgithubにssh接続して・・・みたいな方法もあるけど、とにかくシンプルにやってみたいだけなのでwebhookによる方法を紹介。
※デプロイ用phpをURLとしてGithubに開かせる必要がある方法。
Webhookの取得
Webhookを使うと
Githubの自動デプロイをしたいリポジトリのsettingsタブを開く。
WebhooksをクリックしてAdd webhookする。
Payload URLにGithubにpushされたとき開かせたいページを指定する。deploy.phpの例は後述する。
pushされた時にデプロイ、とするとJust the push event.を用意してくれてるのでこれでok。ほかの条件もlet me select individual events.を選択すると詳細に選べた気がするのでそっちにしたい人はそっちで。
deploy.php
<?php
$d = date('Y-m-d H:i:s', strtotime("now"));
chdir("./リポジトリの作業ディレクトリ");
$command = 'git pull 2>&1';
exec($command, $output, $status);
error_log('['.$d.'] '.$command."\n".'return code : '.$status."\n", 3, '/var/www/html/deploy.log');
foreach($output as $row){
error_log($row."\n", 3, '/var/www/html/deploy.log');
}
print("Done!!");
?>
今見たらこれエラーでもDone気がするけどまいっか。
deploy.logとして残したかったので、時間取得して(VMとかならタイムゾーンを日本に指定してね)
git pullコマンドをexec関数で実行して、ログ出力するだけ。
標準出力も書き込んでるハズだから なぜerror_logで書き込んでるのか謎だから普通にリダイレクトとかでファイルに書き込んでもらって( `ー´)ノ
deploy.log
[2024-02-11 04:47:55] git pull 2>&1
return code : 0
From https://github.com/xxxxx/xxxxx
e582aa6..3ae68bc main -> origin/main
Updating e582aa6..3ae68bc
Fast-forward
sushi.html | 105 +++++++++++++++++++++++++++++---------------------
1 file changed, 62 insertions(+), 43 deletions(-)
[2024-02-11 04:47:57] git pull 2>&1
return code : 0
Already up to date.
[2024-02-22 16:03:18] git pull 2>&1
return code : 0
Already up to date.
こんな感じでプルした時の状況が取得できる。
最後の二回Already up to dateは自分でブラウザ上でアクセスしたときなので、webhookで実行されるときはブランチ切ってるとき以外はこうならないはず。(引数与えてないからmainがpullされてるので。)
デプロイ用のファイルが公開されてるってのがなんか怖いけど検証用とかならまあ・・・いいのかな?