web-dev-qa-db-ja.com

git Push(GitHubおよびnode.js)の後にアプリを自動的にデプロイするにはどうすればよいですか?

アプリケーション(node.js)をVPS(Linux)にデプロイしています。リポジトリとしてgitハブを使用しています。 git Pushでアプリケーションを自動的にデプロイするにはどうすればよいですか?

92
Advanced

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からサイトを取得するための通常のコマンドを配置する必要があります

63
Pawel Dubiel

回答/コメントとしてのGitフックについての言及がいくつかありましたが、これは過去に私のために働いてきました。だから、他の誰かがより詳細を必要とする場合の私のレシピです。

git post-receive hooknode-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)。

23
Wes Johnson

ここで応答するのはおそらく非常に遅い。しかし、私はこのプロジェクトをgithubで見つけて、あなたがやりたいことをはるかにきれいな方法で行うようです。

https://github.com/logsol/Github-Auto-Deploy

見てみな。他の人がコメントや賛成票の観点からこれをどう思うかを知りたいと思うでしょう。

乾杯、
S

18
Saurabh

現在開発中のプロジェクトでは、Jez Humbleの素晴らしい本「Continuous Delivery」に記載されているガイドラインに従います(一読の価値があります)。

これは、何らかの形の継続的統合サーバー(私はThoughtworks無料コミュニティエディション Go を使用)を使用して展開パイプラインを作成することを意味します。その後、展開パイプラインをたどって、運用サーバーへのプッシュを行うことができます。

これは非常に複雑に聞こえますが、そうである必要はなく、コードを書くプロセス全体を行い、生産に安全で心配のない方法にします(怖いリリース日はありません!)。

ライブシステムには完全な展開パイプラインを使用し、作成したnpmモジュールにはカットダウンバージョンを使用します。どちらも同じ1クリック展開技術を共有しています。

8
Roy

あなたの問題に対するノードベースのソリューションを公開しました: node-cd

Github post-receive Hooks を受信し、好きなスクリプトを実行するVPSで実行されているシンプルなノードアプリで構成されます(たとえば、アプリを強制終了し、git pullし、再起動するシェルスクリプト)それ)。

8
A21z

簡単にデプロイできるプロジェクトではgitを使用していることがわかりました。

git-play

それはあなたにとって適切な方法だと思います。

見てみな。

3
Oh Seung Kwon

次に、別の単純なnodeJS実装を示します。

これは、設定したホスト名とポートで実行される非常に単純なノードサーバーであり、GitHubのポスト受信Webフックを処理するようにセットアップできます。そして、実際のpul/test/deployアクションをカスタマイズして、あなたが望むことをすることができます。現在の実装では、nodeJSサーバースクリプトでインラインで指定されているシェルコマンドです。また、非常に単純なsecret_keyベースのセキュリティスキームも用意されています。

https://github.com/shyam-habarakada/rscds

ステージングサーバーには既にノードがインストールされ実行されていたため、これをすばやく簡単に作成できました。

3

Python/tornadoベースのソリューションが必要な場合は、POST Githubの Webhookサービス からのリクエストを処理するスクリプトを作成しました。 https ://github.com/Akobi/ops/tree/master/autodeploy

基本的には、JSON構成ファイルを使用して、プッシュ元のリポジトリ、デプロイ時に実行するコマンド、コマンドを実行するディレクトリを一覧表示します。設定ファイルを好みに合わせて変更するだけですスクリプト!

さらに、Nginxをリバースプロキシとして使用して、これらのPOSTをスクリプトに転送します。 Nginxの設定は、同じGithubリポジトリの「nginx」フォルダーにあります。

ハッピープッシュ!

2
Divij Rajkumar

PHP答えは私の意見では完全に合法ですが、Rubyを好むなら、私は解決策をブログに載せました。それはPHP答え、ちょうど別の言語:Webフックを使用し、関連するHTTPリクエストをリッスンする簡単なスクリプトがあります。

http://gilesbowkett.blogspot.com/2012/06/heroku-style-deployment-on-ec2.html

1
Giles Bowkett

Deepl.io は、この分野で新しく有望な候補のようです。

機能(そのWebサイトから取得):

  • GitLabおよびGitHubからWebhookをキャッチする
  • 複数のリポジトリを構成する
  • リポジトリごとに複数のブランチを構成する
  • PHP、Shell、またはその両方の独自のデプロイスクリプトを使用する
  • 確認メールを送信します
1
vanto

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/ =

1
Justin

リポジトリから新しい更新を自動的にプルダウンする独自の基本的な展開ツールを作成しました- https://github.com/jesalg/SlimJim -基本的には、github post-receive-hookをリッスンしますプロキシを使用して更新スクリプトをトリガーします。

1
jesal

また、 REPOMAN.IO のような無料/安価なサービスがあり、これらのほとんどすべてが自動化されていることに注意してください。

1
Kirschbaum