16.04前書き複数の開発者がいるプロジェクトで作業する場合、ある人がリポジトリにプッシュし、別の人が古いバージョンのコードに変更を加え始めるとイライラすることがあります。このような間違いは時間がかかるため、リポジトリを同期させるスクリプトを設定する価値があります。本番環境でこのメソッドを適用して、修正プログラムやその他の変更をすばやくプッシュすることもできます。この特定のタスクを完了する他のソリューションが存在しますが、独自のスクリプトを作成することは、将来のカスタマイズの余地を残す柔軟なオプションです。[GitHub]では、リポジトリのhttps://developer.github.com/webhooks/[webhooks]を設定できます。リポジトリは、イベントが発生したときにHTTPリクエストを送信するイベントです。誰かがプルリクエストを作成するか、新しいコードをプッシュすると、Webhookを使用して通知できます。webhook通知をリッスンするhttps://nodejs.org/[Node.js]サーバーを開発します。このスクリプトは、リモートサーバー上のリポジトリを最新バージョンのコードで自動的に更新するため、新しいコミットを取得するためにサーバーにログインする必要がなくなります。前提条件このチュートリアルを完了するには、次のものが必要です。+`特権とファイアウォールを持つユーザー。ローカルマシンにインストールされたGit。[オープンソースへの貢献:Git入門]をインストールしてセットアップできます。コンピューターのGit。16.04にNode.jsをインストールする方法]。distro-stableバージョンをインストールするだけで、追加の構成なしで推奨バージョンが提供されます。プロジェクトコードを含むGithubのリポジトリ。[この例をフォーク]までお気軽にご連絡ください。ステップ1-Webhookのセットアップまず、リポジトリのwebhookを構成します。このステップが重要なのは、それがないと、Githubは、事態が発生したときにどのイベントを送信するのか、またはどこに送信するのかを知らないからです。最初にwebhookを作成し、次にリクエストに応答するサーバーを作成します。GitHubアカウントにサインインし、監視するリポジトリに移動します。リポジトリのページのトップメニューバーにある[設定]タブをクリックし、左側のナビゲーションメニューの[Webhooks]をクリックします。Webhookの追加*]をクリックし、プロンプトが表示されたらアカウントパスワードを入力します。次のようなページが表示されます。http://:8080+」と入力します。これは、まもなく作成するNode.jsサーバーのアドレスとポートです。json`に変更します。作成するスクリプトはJSONデータを想定しているため、他のデータタイプを理解することはできません。*には、このWebhookのシークレットパスワードを入力します。Node.jsサーバーでこのシークレットを使用して、要求を検証し、GitHubからのものであることを確認します。*このWebhookをトリガーするイベントを選択するには、*プッシュイベントのみ*を選択します。コードが更新され、サーバーに同期する必要があるため、プッシュイベントのみが必要です。*アクティブ*チェックボックスを選択します。Webhookを追加*]をクリックして作成します。pingは最初は失敗しますが、Webhookが設定されたことを確認してください。次に、サーバーにクローンを作成します。手順2-サーバーへのリポジトリの複製このスクリプトはリポジトリを更新できますが、リポジトリを最初に設定することはできないため、ここでそれを行います。サーバーにログインします。@ホームディレクトリにいることを確認してください。次に、Gitを使用してリポジトリを複製します。+`をGithubプロジェクトの名前に置き換えてください。https://github.com//.gitこれにより、プロジェクトを含む新しいディレクトリが作成されます。次の手順でこのディレクトリを使用します。プロジェクトのクローンを作成したら、webhookスクリプトを作成できます。ステップ3-Webhookスクリプトの作成GitHubからのWebhookリクエストをリッスンするサーバーを作成しましょう。+`でWebサーバーを起動するNode.jsスクリプトを作成します。サーバーはwebhookからのリクエストをリッスンし、指定したシークレットを確認し、GitHubから最新バージョンのコードを取得します。ホームディレクトリに移動します。+`というwebhookスクリプト用の新しいディレクトリを作成します。~/NodeWebhooks次に、新しいディレクトリに移動します。+`という新しいファイルを作成します。webhook.js次の2行をスクリプトに追加します。"";最初の行は、ステップ1で作成したシークレットを保持する変数を定義し、GitHubからのリクエストであることを確認します。2行目は、ローカルディスクで更新するリポジトリへのフルパスを保持する変数を定義します。これは、ステップ2でチェックアウトしたリポジトリを指している必要があります。crypto`ライブラリをインポートするこれらの行を追加します。これらを使用してWebサーバーを作成し、秘密をハッシュして、GitHubから受け取ったものと比較できるようにします。+`ライブラリをインクルードします。webhookリクエストを処理し、それが本物のリクエストである場合に新しいバージョンのコードを取得する新しいWebサーバーを定義します。`でWebサーバーを起動します。セキュリティのために、リクエストに含まれるシークレットがステップ1でwebhookを作成するときに指定したものと一致することを検証します。x-hub-signature`ヘッダーで渡されるため、シークレットをハッシュし、GitHubが送信するものと比較します。+`を使用してローカルリポジトリを更新します。完成したスクリプトは次のようになります。+`のトラフィックを許可することにより、このWebサーバーが外部Webと通信できるようにする必要があります。8080/tcpスクリプトが準備できたので、スクリプトが適切に機能することを確認しましょう。+」を使用して実行することにより、webhookをテストできます。スクリプトを開始し、ターミナルでプロセスを開いたままにします。[Github.com]のプロジェクトのページに戻ります。リポジトリのページのトップメニューバーにある[設定]タブをクリックし、左側のナビゲーションメニューにある[Webhooks]をクリックします。手順1で設定したウェブフックの横にある[編集]をクリックします。*セクションが表示されるまで下にスクロールします。[Webhookの編集]右端の3つのドットを押して、[再配信]ボタンを表示します。ノードサーバーを実行した状態で、[再配信]をクリックして、リクエストを再度送信します。リクエストを送信することを確認すると、成功したレスポンスが表示されます。+」応答コードで示されます。これで、スクリプトをバックグラウンドで実行し、ブート時に開始することを確認できます。+`を使用すると、ノードのwebhookサーバーが停止します。ステップ5-WebhookをSystemdサービスとしてインストールするsystemdは、Ubuntuがサービスを制御するために使用するタスクマネージャーです。ブート時にwebhookスクリプトを開始し、systemdコマンドを使用して他のサービスと同様に管理できるサービスを設定します。新しいサービスファイルを作成することから始めます。/etc/systemd/system/webhook.servicesystemdにスクリプトの実行方法を指示する次の構成をサービスファイルに追加します。これはSystemdにノードスクリプトの場所を伝え、サービスを説明します。+`をユーザー名に置き換えてください。/home//NodeWebhooks/webhook.jsRestart=on-failure[Install]WantedBy=multi-user.targetシステムの起動時に開始されるように、新しいサービスを有効にします。webhook.service次に、サービスを開始します。webhookサービスが開始されていることを確認します。webhookサービスがアクティブであることを示す次の出力が表示されます。/home/sammy/NodeWebhooks/webhook.jsこれで、新しいコミットをリポジトリにプッシュし、サーバー上の変更を確認できます。デスクトップマシンから、リポジトリのクローンを作成します。https://github.com//.gitリポジトリ内のファイルの1つを変更します。次に、ファイルをコミットし、コードをGitHubにプッシュします。masterWebhookが起動し、変更がサーバーに表示されます。新しいコミットをリモートリポジトリに自動的にデプロイするNode.jsスクリプトをセットアップしました。このプロセスを使用して、監視する追加のリポジトリを設定できます。リポジトリーをプッシュするときにWebサイトまたはアプリケーションを実動にデプロイするように構成することもできます。