Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What is going on with this article?
@k-tabuchi

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

More than 1 year has passed since last update.

目標 

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接続する手順~公開鍵・秘密鍵の生成から~

4
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
k-tabuchi
SE/プログラマ2年生。 PHP+LinuxでのWEB開発が中心。 フレームワークはLaravel中心。symfonyを勉強中。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
4
Help us understand the problem. What is going on with this article?