したがって、私はgitフックを認識しており、次にそれらを調査しますが、リモートサーバーのリポジトリを最新の状態に保つために、cronを介して実行する単純なbashスクリプトを記述したいと考えています。私はそれがこのように機能すると想像します:
私は現在、これを次のようなcronタスクとして機能させています。
*/1 * * * * cd /my/sites/staging && git pull -q Origin master && grunt production
何も変更されない場合は、うなり声のビルドを実行する必要がないようにしています。結局のところ、git pullが実際に何かをプルしたかどうかを判断し、それを条件として、うなり声ビルドを実行するために使用できると思います。 Ubuntuサーバー、キーはgithubにインストールされています。助けてくれてありがとう!
両方の問題(デプロイメントを自動的に処理し、無駄な作業を回避します。たとえば、何も変更されていない場合にgrunt
タスクを実行する)は、git
フックの目的です。
したがって、私のアドバイスは、cron
タスクをすべて取り除き、できるだけ早くフックを介してリポジトリの管理に切り替えることです。
これが通常行われる方法は詳細に説明されています ここ 、そして基本的にはbare
リポジトリ(ahubrepo)to to push/pull from and the check-out version of the same repo(aliverepo)場所にある適切なパスたとえば、/srv/www/html
と言います。
hubリポジトリを処理するためにgitolite3
を使用するのが好きですが、これは必須ではありませんが、 選択したLDAPにバインドされたきめの細かいアクセス制御 必要な場合。
また、Sudo
を介してgitolite3
ユーザーの機能を制限し、Sudo
呼び出しを使用してフックを処理することもお勧めします。これは、gitolite3
フックを使用した実際の例です(必要に応じて、それらを自由に変更(または拡張/修正)してください)。
hubリポジトリpost-update
フック:
#!/bin/sh
echo "****"
echo "**** Calling publisher-hub2live script [Hub's post-update hook]"
echo "****"
Sudo /usr/local/sbin/publisher-hub2live "/srv/www/html" "root:Apache" "2750" "640"
exit 0
publisher-hub2live
スクリプト:
#!/bin/sh
echo "****"
echo "**** Pulling changes into Live [publisher-hub2live]"
echo "****"
cd "$1" || exit
umask 0022
unset GIT_DIR
/usr/bin/git pull hub master
# custom actions here
# e.g call grunt tasks
/bin/chown -R "$2" "$1"
/bin/find "$1" -type d -exec chmod "$3" {} +
/bin/find "$1" -type f -exec chmod "$4" {} +
/bin/chmod u+x "$1"/.git/hooks/post-commit
/sbin/restorecon -R -v "$1"
exec /usr/bin/git update-server-info
exit 0
liverepo post-commit
フックは、liveリポジトリとハブを同期したい。
このインフラストラクチャでは、sudoers
ファイルに次のエントリ(または同等のエントリ)が必要です。
Cmnd_Alias GITOLITE_CMDS = /usr/bin/git, /bin/chown, /bin/find, /bin/chmod, /sbin/restorecon, /usr/local/sbin/publisher-hub2live
Defaults:gitolite3 !requiretty
Defaults:gitolite3 lecture=never
gitolite3 ALL = (root)NOPASSWD: GITOLITE_CMDS
また、sshd_config
のMatch
ブロックは、マシンでIDをどのように管理するかによって異なります。
Match Group gitolite3
Banner /etc/issue.empty
RequiredAuthentications2 publickey
これがすべて整ったら、hubリポジトリにpushするとpost-update
フックがトリガーされ、カスタムアクションが確実に実行されますonly何か新しいものがあるとき。
私はあなたがこの問題を単にそれを行うことで解決できると思います:
*/1 * * * * cd /my/sites/staging && git pull -q Origin master|grep -v "up-to-date" && grunt production
私は自分の人形の理解からそれを使ったことがありません http://puppetlabs.com/ あなたはこれを行うことができます。
パペットが実行されるたびに、何かが変更されると、ゴールドイメージが何であるかに基づいて自動的に他のサーバーにプッシュされます。また、ゴールドイメージを作成した後に多数のサーバーがある場合は、別のベースに基本インストールパペットを作成でき、新しいサーバーはマスターサーバーから残りの構成を取得します。