アプリケーション(node.js)をVPS(Linux)にデプロイしています。リポジトリとしてgitハブを使用しています。 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 hook と 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は、リポジトリへのプッシュに続いて、アプリディレクトリ内のファイルを更新します。
Run Node with Node-Supervisor
マシンにNode-Supervisorをグローバルノードモジュールとしてインストールする必要があります:Sudo npm install supervisor -g
Node-supervisorでノードアプリを実行するだけで、作業ディレクトリ内のファイルの変更を監視できます。
supervisor /home/path/to/your/www/server.js
(注supervisor
の代わりにnode
)。
ここで応答するのはおそらく非常に遅い。しかし、私はこのプロジェクトをgithubで見つけて、あなたがやりたいことをはるかにきれいな方法で行うようです。
https://github.com/logsol/Github-Auto-Deploy
見てみな。他の人がコメントや賛成票の観点からこれをどう思うかを知りたいと思うでしょう。
乾杯、
S
現在開発中のプロジェクトでは、Jez Humbleの素晴らしい本「Continuous Delivery」に記載されているガイドラインに従います(一読の価値があります)。
これは、何らかの形の継続的統合サーバー(私はThoughtworks無料コミュニティエディション Go を使用)を使用して展開パイプラインを作成することを意味します。その後、展開パイプラインをたどって、運用サーバーへのプッシュを行うことができます。
これは非常に複雑に聞こえますが、そうである必要はなく、コードを書くプロセス全体を行い、生産に安全で心配のない方法にします(怖いリリース日はありません!)。
ライブシステムには完全な展開パイプラインを使用し、作成したnpmモジュールにはカットダウンバージョンを使用します。どちらも同じ1クリック展開技術を共有しています。
あなたの問題に対するノードベースのソリューションを公開しました: node-cd
Github post-receive Hooks を受信し、好きなスクリプトを実行するVPSで実行されているシンプルなノードアプリで構成されます(たとえば、アプリを強制終了し、git pullし、再起動するシェルスクリプト)それ)。
次に、別の単純なnodeJS実装を示します。
これは、設定したホスト名とポートで実行される非常に単純なノードサーバーであり、GitHubのポスト受信Webフックを処理するようにセットアップできます。そして、実際のpul/test/deployアクションをカスタマイズして、あなたが望むことをすることができます。現在の実装では、nodeJSサーバースクリプトでインラインで指定されているシェルコマンドです。また、非常に単純なsecret_keyベースのセキュリティスキームも用意されています。
https://github.com/shyam-habarakada/rscds
ステージングサーバーには既にノードがインストールされ実行されていたため、これをすばやく簡単に作成できました。
Python/tornadoベースのソリューションが必要な場合は、POST Githubの Webhookサービス からのリクエストを処理するスクリプトを作成しました。 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
Deepl.io は、この分野で新しく有望な候補のようです。
機能(そのWebサイトから取得):
https://commando.io の創設者であり、最近、サービスを介したGitHubとの統合を発表しました。この統合により、GitHubリポジトリにプッシュするときにサーバーで実行を実行できます。これは、コードをプッシュするときに展開スクリプトを自動的に実行する絶好の機会です。
実行とは、bash、Perl、python、Ruby、go、またはnode.jsで記述できるCommando.io内で記述するスクリプトです。続きを読み、git pull
を実行する実行スクリプトの例を参照するには、ブログ投稿のお知らせを参照してください: http://blog.commando.io/run-executions-via-github-Push/ =
リポジトリから新しい更新を自動的にプルダウンする独自の基本的な展開ツールを作成しました- https://github.com/jesalg/SlimJim -基本的には、github post-receive-hookをリッスンしますプロキシを使用して更新スクリプトをトリガーします。
また、 REPOMAN.IO のような無料/安価なサービスがあり、これらのほとんどすべてが自動化されていることに注意してください。