アプリケーション(node.js)をVPS(linux)にデプロイしました。リポジトリとしてgit hubを使用しています。git pushでアプリケーションを自動的にデプロイするにはどうすればよいですか?
アプリケーション(node.js)をVPS(linux)にデプロイしました。リポジトリとしてgit hubを使用しています。git pushでアプリケーションを自動的にデプロイするにはどうすればよいですか?
回答:
PHPの例:
githubリポジトリに移動してgithubリポジトリに移動し、[管理]をクリックします。
「サービスフック」タブをクリックします=>「WebHook URL」
そして追加
http://your-domain-name/git_test.php
次にgit_test.phpを作成します
<?php
try
{
$payload = json_decode($_REQUEST['payload']);
}
catch(Exception $e)
{
exit(0);
}
//log the request
file_put_contents('logs/github.txt', print_r($payload, TRUE), FILE_APPEND);
if ($payload->ref === 'refs/heads/master')
{
// path to your site deployment script
exec('./build.sh');
}
build.shには、githubからサイトを取得するための通常のコマンドを配置する必要があります
回答/コメントとしてのGitフックについての言及がいくつかありましたが、これは過去に私のために機能しました。
私はgit post-receiveフックとnode-supervisorの組み合わせを使用して、単純な自動デプロイメントを実現しています(そのマシンでgitリモートリポジトリを使用していると想定しています)。
受信後フックをセットアップする
リポジトリで: sudo vi hooks/post-receive
そしてそれは次のようになります:
#!/bin/sh
GIT_WORK_TREE=/home/path/to/your/www
export GIT_WORK_TREE
git checkout -f
ファイルの権限を設定します。 chmod +x hooks/post-receive
Gitは、リポジトリへのプッシュ後にアプリディレクトリ内のファイルを更新します。
ノードスーパーバイザーでノードを実行する
マシンにグローバルノードモジュールとしてNode-Supervisorをインストールする必要があります。 sudo npm install supervisor -g
次に、node-supervisorを使用してノードアプリを実行するだけで、作業ディレクトリ内のファイルへの変更を監視します。
supervisor /home/path/to/your/www/server.js
(のsupervisor
代わりに注意してくださいnode
)。
npm install -l
し、リモートサーバー上で実行するデプロイ戦略が賢明です。もちろん、これはpost-receiveフックを使用してメソッドと組み合わせることができます。
おそらくここで返信するのが非常に遅い。しかし、私はgithubでこのプロジェクトを見つけて、あなたがやりたいことをしているように見えますが、はるかにきれいな方法です。
https://github.com/logsol/Github-Auto-Deploy
見てみな。コメントや賛成票の観点から、他の人がこれについてどう思っているかを知ることにも興味があります。
乾杯、
S
現在開発中のプロジェクトでは、Jez Humbleの素晴らしい本「Continuous Delivery」(よく読む価値があります)に記載されているガイドラインに従います。
これは、何らかの形の継続的インテグレーションサーバー(私はGoの Thoughtworks無料コミュニティエディションを使用しています)を使用してデプロイメントパイプラインを作成することを意味します。その後、デプロイメントパイプラインをたどることができ、本番サーバーにプッシュされます。
これは非常に複雑に聞こえますが、そうである必要はありません。コードを記述するプロセス全体を行い、本番環境に安全に導入して心配する必要がありません(怖いリリース日はありません!)。
私は、ライブシステムの完全な展開パイプラインと、私が作成するnpmモジュールの削減バージョンを使用しており、どちらも同じ1クリックの展開手法を共有しています。
次に、単純なnodeJSの実装を示します。
これは、設定したホスト名とポートで実行される非常にシンプルなノードサーバーであり、GitHubポスト受信Webフックを処理するように設定できます。また、実際のプル/テスト/デプロイアクションは、必要に応じてカスタマイズできます。現在の実装では、nodeJSサーバースクリプトでインラインで指定されているのはシェルコマンドです。また、非常にシンプルなsecret_keyベースのセキュリティスキームも導入されています。
https://github.com/shyam-habarakada/rscds
私のステージングサーバーには既にノードがインストールされて実行されているため、これをすばやく簡単に作成できました。
python / tornadoベースのソリューションが必要な場合は、GithubのWebhook ServicesからのPOSTリクエストを処理するスクリプトを作成しました。https://github.com/Akobi/ops/tree/master/autodeployで見つけることができます
基本的には、JSON構成ファイルを使用して、プッシュが予想されるリポジトリ、デプロイで実行するコマンド、コマンドを実行する必要があるディレクトリをリストします。必要なのは、構成ファイルを好みに合わせて変更することだけです。スクリプト!
さらに、Nginxをリバースプロキシとして使用して、これらのPOSTをスクリプトに転送します。Nginx設定は、同じGithubリポジトリの「nginx」フォルダの下にあります。
ハッピープッシュ!
PHPの答えは私の意見では完全に合法ですが、Rubyを好むなら、私は解決策をブログに書いています。PHPの回答と同じですが、言語が異なります。Webフックを使用して、関連するHTTPリクエストをリッスンする簡単なスクリプトを用意します。
http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html
リポジトリから新しい更新を自動的にプルダウンする独自の基本的な展開ツールを作成しました-https ://github.com/jesalg/SlimJim-基本的にそれはgithub post-receive-hookをリッスンし、プロキシを使用してトリガーします更新スクリプト。
私はhttps://commando.ioの創設者です。最近、サービスを介したGitHubとの統合を発表しました。統合により、GitHubリポジトリにpushするときにサーバーで実行を実行できます。これは、コードをプッシュしたときにデプロイメントスクリプトを自動的に実行する絶好の機会です。
実行とは、Commando.io内で記述するスクリプトで、bash、perl、python、ruby、go、またはnode.jsで記述できます。詳細を確認し、runningの実行スクリプトの例を確認するgit pull
には、ブログ投稿のアナウンスを参照してください:http : //blog.commando.io/run-executions-via-github-push/
また、REPOMAN.IOのような無料/安価なサービスがあり、これらのほとんどすべてを自動化します。