web-dev-qa-db-ja.com

Github PushでWebサイトのGit Pullを自動的にトリガーする

ウェブサイト開発環境の再設計を完了し、すべてのソースコードをGithubに配置し、ウェブサーバーでgit pull Origin masterコマンドを実行するだけでアプリケーション全体が更新されるように、リモートサーバーでGitを設定できました。 Githubリポジトリのソースコード。

私が今理解しようとしているのは、プロセスを自動化する方法です。マスターブランチからプルされたコード。常に展開の準備ができており、既にテスト済みです。コードをマスターブランチにプッシュするとき、Githubフックの1つを使用して、サーバーからのプルを自動的に実行し、アプリケーションを更新します。

私はサーバーにSSHアクセスしており、現時点で必要になるたびにコマンドを手動で実行できますが、コードをGithubにプッシュし、サーバーへのSSH接続を開いて更新されたコードをプルするのに時間がかかります。

Gitにこれをサポートするネイティブ機能があるかどうか、またはWebフックを使用してWebサーバーでファイルを実行してgit pull Origin masterコマンドをトリガーする必要があるかどうかはわかりません。

ありがとう

7

さて、これをなんとか理解できました。 Gitには、リモートフェッチをトリガーするネイティブ機能がありません(リポジトリにコードをプッシュし、リポジトリがWebサーバーでプルOriginをトリガーする場合など)。

これを解決した方法は、PHPスクリプトをデフォルトのvhostの下でWebサーバーにアップロードすることでした。そのファイル内で、Shell_exec("cd /path/to/my/site/root" && Sudo git pull Origin master"を実行するように設定しています。プルが正常に完了したかどうかを通知するために、STDOUTを介して出力されるメッセージを含むメールを送信するように設定されます。

次に、リポジトリへのすべてのプッシュが、http://server.domain.com/github-deploy.phpとしてアドレス指定したファイルへのWebhook呼び出しをトリガーするように、GithubにWebhookを設定しました。

現在、他の誰もファイルにアクセスできないことを確認するためにいくつかの非公開のセキュリティチェックを実行しています。そのうち、おそらくIPチェックを追加して、ファイルへのリクエストがGithubのアドレスブロックのIPからのみ送信されることを確認します。

ここで追加する重要な注意点は、この作業を行う唯一の方法は、Apacheユーザーがサーバー上のsudoerとしてアクセスできるようにすることですが、Gitを起動するSudoコマンドを実行できるように制限することですアクセス拒否メッセージがトリガーされます。ただし、gitに制限し、呼び出し元のスクリプトからの入力をshel_execコマンドに渡さないことで、セキュリティに関する懸念を相殺できたと思います。

最終的には、おそらくこれをGithubとのサービスリンクとして実装しますが、現時点ではこれで十分です。

7

Gitの「作業ディレクトリ」からサイトを提供することは悪い習慣と見なされます-理由を参照してください here および here

これを行う最良の方法は、サーバーに「ポスト」受信フックを使用して「ベア」Gitリポジトリを設定することです。 この記事 は、最近これを行ったときに従ったもので、基本的な考え方は次のとおりです。

  1. git init --bareで「裸の」リポジトリを作成します

  2. 裸のレポでhooks/post-receiveを編集して、レポをWebルートにコピーします:GIT_WORK_TREE=/var/www/yoursite git checkout -f

  3. ローカルマシンで、ベアリポジトリをリモートとして追加します。

  4. git Push <remotename>を使用して、ライブサイトにプッシュします。

8
DisgruntledGoat