7

私はhttp://jekyllrb.com/docs/deployment-methods/の指示に従って、Jekyll デプロイメント用の git post-receive フックをセットアップしようとしていますが、私にとっては少し密集しています。そのリンクには、次のような段落があります

Git を使用して変更をプッシュするたびにリモート サーバーがデプロイを処理するようにするには、authorized_keys ファイルでデプロイが許可されているすべての公開鍵を持つユーザー アカウントを作成します。これで、post-receive フックの設定は次のように行われます。

質問 1: 「ユーザー アカウント」を作成する場所 (リモート サーバー上の Github) と (質問 2) このauthorized_keysファイルの場所がわかりません。ローカル マシンのホーム ディレクトリに、github などのキーを含むknown_hostsファイルがあります。それは、authorized_keys ファイルですか?

指示は、このような受信後フックを設定するように指示します

laptop$ ssh deployer@myserver.com
server$ mkdir myrepo.git
server$ cd myrepo.git
server$ git --bare init
server$ cp hooks/post-receive.sample hooks/post-receive
server$ mkdir /var/www/myrepo

案内mkdir myrepo.gitがちょっとわかりにくい。たとえば、Jekyll サイトをローカル マシンの git バージョン管理に配置したところ、このパスが表示されました/Users/me/Sites/nginxjekyll/_site/.git/

質問 3) では、mkdir myrepo.git の指示に従って、mkdir /Users/me/Sites/nginxjekyll/_site/.git/リモート サーバーにディレクトリを作成する必要があるということですか? 続けて、それは言います、

   cp hooks/post-receive.sample hooks/post-receive

hooks/post-receive.sampleしかし、コピーするファイルがありませんか? 私のローカル マシンの git リポジトリには、post-update.sample がありますが、post-receive.sample はありません。さらに、リモート サーバーにディレクトリ mkdir /Users/me/Sites/nginxjekyll/_site/.git/ を作成したときに、そこに post-update.sample ファイルが作成されませんでした。

お時間があれば、これらの指示を明確にしていただけますか。前もって感謝します。

4

1 に答える 1

7

質問 1:リモート サーバー上のユーザーを参照しています。

質問 2:これは 2 つのシナリオによって異なります。 1. リモート サーバーにプッシュするローカル ユーザーの公開鍵を追加する必要があります。2. 別のサーバーにデプロイするために ssh が必要な場合は、post-receive フックを実行するローカル ユーザーに公開鍵を追加する必要があります。ほとんどの場合、問題になるのは 1 つだけで、リモート サーバーがリモート git リポジトリと www サーバーを格納するため、2 は問題ではありません。

これは、linux/unix 環境で、公開鍵を authorized_keys ファイルに追加することを意味します。このファイルは通常、/home/$USER/.ssh/authorized_keys にあります。authorized_keys ファイルは、ユーザーの known_hosts ファイルと同じディレクトリにあります。

質問 3:リモート git リポジトリのセットアップ方法を説明しています。ローカル リポジトリと同じパスである必要はありません。

OK - ここで実際に何が起こっているのかを明確にします。このチュートリアルでは、プッシュされるたびに jekyll インストールをデプロイするリモート リポジトリをセットアップする方法を説明しています。

これは、github リポジトリがある場合、そこにサーバー側のフックをセットアップできないことを意味します。代わりに、リモート サーバーに新しいリモートをセットアップします。したがって、サーバーにログインし (通常は ssh を使用)、実行pwdしてフル パスを取得するか、環境変数に設定するとします。

$DIR=`pwd`

これで、このサーバーにベア リポジトリを作成できます。

git init --bare $DIR/<SOMEDIRNAME>.git

これで、サーバーにリモートのベア git リポジトリができました。次に、プッシュの受信時に Jekyll サイトをデプロイできるようにするフックを追加する必要があります。あなたがリストしたサイトの展開はかなり単純ですが、基本的には _site dir を提供される html ページにするだけです。これを行うにはいくつかの方法があります。ユーザーをできるだけ混乱させずに行うことをお勧めします。は、そのようなことを行うサンプル スクリプトです。

#!/bin/bash
# Assuming a directory structure for www:
# $www_root/releases 
# $www_root/shared
# $www_root/current
# all releases go in releases dir as timestamps dirs
# any logs or other shared items go in shared dir - shared/logs
# current is a symlink to latest release
unset GIT_DIR
WWW_ROOT=/PATH/TO/WWW
REPO_PATH=/PATH/TO/REPO
REPO_BRANCH=master
SITE_DIR=/PATH/TO/_SITE/DIR/IN/REPO
DATE=$(date +"%Y%m%d%H%M")

# get code
if [ ! -d $WWW_ROOT/shared/git_maint ]; then 
  mkdir -p $WWW_ROOT/shared/git_maint
  cd $WWW_ROOT/shared/git_maint
  git clone $REPO_PATH $WWW_ROOT/shared/git_maint
  git checkout master
else
  cd $WWW_ROOT/shared/git_maint
  git pull
  git checkout master
fi

# do deploy
if [ ! -d $WWW_ROOT/releases/$DATE ]; then mkdir $WWW_ROOT/releases/$DATE; fi 
cp -ar $WWW_ROOT/shared/git_maint/$SITE_DIR $WWW_ROOT/releases/$DATE
ln -snf $WWW_ROOT/releases/$DATE $WWW_ROOT/current

exit 0

そのようなものは良い展開になります。このスクリプトをリモート サーバーのベア リポジトリ フック/post-receive ファイルに保存すると、リポジトリがプッシュされるたびにスクリプトが実行されます。実行可能にすることを忘れないでください: chmod 755hooks/post-receive したがって、この新しいリモートを git リポジトリに追加すると、次のようになります。

git remote add DEPLOY_PROD user@remote.server.com:/path/to/bare/repo

次にgit push DEPLOY_PROD、それがリモートにプッシュされ、リモート リポジトリが post-receive フックを起動し、ベア リポジトリをメンテナンス ディレクトリにコピーします。このディレクトリは、ほぼいつでも吹き飛ばすことができます。このディレクトリは、サイト ディレクトリをリリース ディレクトリに cp するために使用され、メイン ディレクトリにリンクされます。

もちろん、これはすべてやり過ぎである可能性が高く、ローカル ホストから実行するデプロイ スクリプトを作成するだけで、ssh 経由でこれらすべてを実行できます。

問題は、この方法論ではサーバー側のフックを github から直接実行できないため、回避する必要があることです。展開戦略としてカピストラーノをチェックすることをお勧めします- current/releases/shared ディレクトリと git_maint ディレクトリはスキーマから取得され、うまく機能します。

ここで何か助けが必要な場合はお知らせください。私は展開および自動化された展開戦略の開発に多くの経験を持っているため、状況によって状況が異なります.

于 2013-07-27T01:32:35.640 に答える