公開鍵使って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されてるので。)

デプロイ用のファイルが公開されてるってのがなんか怖いけど検証用とかならまあ・・・いいのかな?

投稿者 nekoy3

猫山さん。 そこら辺の情報系大学生。 ツイ廃しすぎてSNSに大半の時間を吸われており、自己規制欠けたらQOLが上がりかけててわろてる。(笑い事じゃない)

関連投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA