web-dev-qa-db-ja.com

git repoを使用してリモートサーバーを最新の状態に保つ

したがって、私はgitフックを認識しており、次にそれらを調査しますが、リモートサーバーのリポジトリを最新の状態に保つために、cronを介して実行する単純なbashスクリプトを記述したいと考えています。私はそれがこのように機能すると想像します:

  • cronはmyupdatescript.shを実行します
  • myupdatescript.shは:
    1. / my/sites/stagingにcdします
    2. git pull -q Originマスター
    3. ifsomethingがプルされた場合:
      • ソースをビルドするためにうなり声を実行します
      • ヤッダヤッダヤッダ

私は現在、これを次のようなcronタスクとして機能させています。

*/1 * * * * cd /my/sites/staging && git pull -q Origin master && grunt production

何も変更されない場合は、うなり声のビルドを実行する必要がないようにしています。結局のところ、git pullが実際に何かをプルしたかどうかを判断し、それを条件として、うなり声ビルドを実行するために使用できると思います。 Ubuntuサーバー、キーはgithubにインストールされています。助けてくれてありがとう!

3
Greg

両方の問題(デプロイメントを自動的に処理し、無駄な作業を回避します。たとえば、何も変更されていない場合に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_configMatchブロックは、マシンでIDをどのように管理するかによって異なります。

 Match Group gitolite3
  Banner /etc/issue.empty
  RequiredAuthentications2 publickey

これがすべて整ったら、hubリポジトリにpushするとpost-updateフックがトリガーされ、カスタムアクションが確実に実行されますonly何か新しいものがあるとき。

4
dawud

私はあなたがこの問題を単にそれを行うことで解決できると思います:

*/1 * * * * cd /my/sites/staging && git pull -q Origin master|grep -v "up-to-date" && grunt production
3
Daniele Siddi

私は自分の人形の理解からそれを使ったことがありません http://puppetlabs.com/ あなたはこれを行うことができます。

パペットが実行されるたびに、何かが変更されると、ゴールドイメージが何であるかに基づいて自動的に他のサーバーにプッシュされます。また、ゴールドイメージを作成した後に多数のサーバーがある場合は、別のベースに基本インストールパペットを作成でき、新しいサーバーはマスターサーバーから残りの構成を取得します。

0
Douglas Francis