2

自動展開スクリプトをテスト サーバーにローカルでセットアップしたいと考えています。
ubuntu デスクトップ 11.04 で gitolite を使用しています。apt-get install gitolite を使用して gitolite をインストールするので、ユーザー gitolite とグループ gitolite を作成します。
ここで、ユーザーとグループ ivan:ivan を持つ apache を使用してテスト Web サーバーをセットアップし、
そのユーザー名で git clone を実行します。
したがって、すべてのファイルとフォルダーのファイル所有者は ivan:ivan と同じです。

/var/lib/gitolite/repository/testrepo/hooks/ の下に post-receive フックをセットアップし、次のスクリプトを内部に配置します。

#!/bin/bash
#CONFIG
LIVE="/home/ivan/public_html/testrepo"

read oldrev newrev refname
if [ $refname = "refs/heads/master" ]; then
  echo "===== DEPLOYING TO TEST SITE ====="
  unset GIT_DIR
  cd $LIVE
  git pull origin master:
  echo "===== DONE ====="
fi  

post-receive フックは gitolite ユーザーによって実行されるため、ユーザー ivan を使用しているテスト サーバーへのアクセスにパーミッションの問題があります。

私はすでに ivan グループに gitolite を追加してグループ アクセス書き込みにしていますが、それでも実行できません。
これが許可の問題であることは知っていますが、解決策がわかりません。
同じような経験をお持ちの方、または何かアドバイスがありましたら、よろしくお願いします。

ありがとう
イヴァン

4

2 に答える 2

3

ポインタをくれたVonCに感謝します。
私の解決策は美しくはないかもしれませんが、それでも機能します。

したがって、私のソリューションで機能する手順は次のとおりです。

  1. Web アプリケーションと同じユーザー権限を持つ裸のリポジトリを作成します。

  2. Gitolite リポジトリ フォルダー (Ubuntu の場合: /var/lib/gitolite/repositories) で、先ほど作成したベア リポジトリのリポジトリをミラーリングする post-receive フックを作成します。コードは次のとおりです。

    #!/bin/bash
    echo '==== DO MIRROR ===='
    git push --mirror user@host:path/to/bare.git
    echo '==== DONE MIRROR ===='

  3. そして、私の Web アプリケーションでは、その裸のリポジトリに接続するリモートを作成します。

  4. 次に、ミラー化されたベア リポジトリに post-receive フックを作成します。これは、Web アプリケーションにそこからプルするように要求します。コード:

    #!/bin/bash
    WORK_DIR="/home/ivan/public_html/test/testing"
    read oldrev newrev refname
    if [ $refname = "refs/heads/master" ]; then
    echo "===== DEPLOYING TO LIVE SITE ====="
    unset GIT_DIR
    cd $WORK_DIR
    git pull mirror-repo master
    echo "===== DONE ====="
    fi

  5. 受信後の両方で chmod +x を忘れないでください。

前に言ったように、少なくとも私の現在の状況では、それは美しくはないかもしれませんが、それでも機能します. gitolite リポジトリからプルするだけではない理由は、ユーザー ファイルのアクセス許可のためです。Ubuntu (apt-get からインストール) では、gitolite はユーザーとグループ、gitolite:gitolite を保持します。私のWebアプリケーションは、ユーザーとグループivan:ivanを持つホームフォルダー(suPHPを使用しています)の下にあります。そのため、gitolite リポジトリにプッシュすると、gitolite ユーザーの下で bash スクリプトが実行され、ホーム フォルダーの下の .git フォルダーにアクセスできなくなります。

そうです、より良い解決策をお持ちの方からのご連絡をお待ちしております。
私の解決策が他の人に役立つことを願っています。
イヴァン

于 2012-04-09T04:31:11.077 に答える