2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

さくらサーバへのWebhookでのGit自動化の悪戦履歴(成功したので修正追記)

Last updated at Posted at 2019-09-04

#目標 
LaravelでGit push をwebhookで自動化したい。
私は未解決です。が、一部解決したことだけ書いています。
#失敗1 webhook.phpへのパスが通らない

自動化phpの作り方は検索すると何件か出てきたので参考にやってみましたが、そのphpファイルをどこに置くか、URLはどうなるのかので苦戦しました。
みなさん、そこのところ黒塗りにして隠しているので困りました。
Webhookの設定欄の近くで以下のように404が出ている時はおそらくパスが通っていない。
スクリーンショット 2019-09-04 21.24.54.png

解決策
さくらサーバー側のディレクトリで、

~/home/ユーザー名/www/プロジェクト名

のプロジェクト名フォルダの直下にwebhookの書いてあるphpを置く。
(www/以下ならどこでも良さそうですがここではLaravel開発を前提にプロジェクトフォルダがあるものとしています。)

するとURLが

http://ユーザー名.sakura.ne.jp/プロジェクト名/deploy.php

になるので
スクリーンショット 2019-09-04 21.42.05.png

Payload URL のところに記入して登録する。

するとエラーメッセージが
スクリーンショット 2019-09-04 21.44.29.png
になった。

とりあえずこのファイルのパスは通ったようなので次はphpファイルの中身だろうか。
#解決法(2019/10/31追記)

上記のタイムアウトが起きた原因は公開鍵をGithubに登録していなかったからでした。
今までシェルでsshログインしてターミナルでpullしていましたが、webhookで自動化する場合はユーザー名とパスワードが入力できない(できるかもしれないが現状、私はそのphpコマンドがわからない。)
そのため、githubがイベントを通知してさくらネットのdeploy.phpが起動してもパスワードがないのでpermission deniedになっていたようです。

さくらネットのサーバー内で公開鍵と秘密鍵のセットを作り、githubのsettingページの鍵登録欄に公開鍵(テキストベースの文字列)をコピペして登録することで、githubとさくらネットの間でパスワード入力が免除されます。

deploy.phpの何がおかしいかまではログで教えてもらえないのでハマりました。

公開鍵の設定のやり方はこのページの一番下に参考にしたページのリンクを貼っておきましたのでそちらをみてください。かなり詳しく書いておられます。

ちなみにphpコードが構文エラーなどでコケている場合は下のように500エラーが表示されます。
スクリーンショット 2019-10-31 21.59.18.png

なので、それが出ないでタイムアウトする場合はphp自体は反応しています。

deploy.phpの中身についてはサイトによって色々書かれていますが、

deploy.php
<?
echo "<p>webhook start</p>";
exec('cd /home/アカウント名/www/gitpullしていたディレクトリ名/',$op);
print_r($op); 
exec('git pull');
echo "<p>webhook finish</p>";
?>

これだけで動きます。echoとprintは確認用にログ出してるだけなので実質二行です。
他の方は一行にまとめてる人が多いです。
exec()メソッドはクォーテーションの中の文字列をそのままターミナルに吐き出しているだけです。
つまり、1回目のexecで今までgit pullしてパスワード入力していたところに行って、
2回目のexecでプルしてるだけです。

上の内容で成功すると以下のログが出ます。
スクリーンショット 2019-10-31 22.17.36.png

もしコケる場合、execを消してechoの行だけにしてプッシュしてみてください。
ここのBody欄のログは自動プッシュに成功したかどうかじゃなくて、deploy.phpのprint系メソッドのログを出力しているだけなので、echoだけでテストするとイベントが通知、発火できているかどうかを確かめられます。

#参考にしたページ

GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?