2013-07-23 25 views
7

Tôi đang cố gắng thực hiện theo các hướng dẫn http://jekyllrb.com/docs/deployment-methods/ để thiết lập móc nối sau khi nhận để triển khai Jekyll, tuy nhiên, tôi thấy chúng hơi dày đặc đối với tôi. Tại liên kết đó, có một đoạn nói rằngthiết lập móc git sau khi nhận

Để có một máy chủ từ xa xử lý triển khai cho bạn mỗi khi bạn đẩy thay đổi sử dụng Git, bạn có thể tạo một tài khoản người dùng trong đó có tất cả các khóa công khai được ủy quyền để triển khai trong tệp authorized_keys của nó. Với điều đó tại chỗ, lập hậu nhận móc được thực hiện như sau:

Câu hỏi 1: Đó là không rõ ràng với tôi, nơi các 'tài khoản người dùng' nên được tạo ra (trên Github trên máy chủ từ xa?), và (Câu hỏi 2) nơi tập tin authorized_keys này sẽ là. Tôi có một tập tin known_hosts trong thư mục chính của tôi trên máy cục bộ của tôi với các phím cho github, vv Đó có phải là tệp authorized_keys không?

Các hướng dẫn đi vào nói với bạn để thiết lập một cái móc sau nhận được như thế này

laptop$ ssh [email protected] 
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 

Các hướng dẫn mkdir myrepo.git là một chút không rõ ràng đối với tôi. Ví dụ, tôi đặt trang web Jekyll của tôi vào điều khiển phiên bản git trên máy cục bộ của tôi và nó đã cho tôi đường dẫn này /Users/me/Sites/nginxjekyll/_site/.git/

Câu hỏi 3) Điều đó có nghĩa là, sau đó, theo hướng dẫn mkdir myrepo.git, tôi nên tạo một thư mục mkdir /Users/me/Sites/nginxjekyll/_site/.git/ trên máy chủ từ xa của tôi? Tiếp tục, nó nói,

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

Tuy nhiên, tôi không có tệp hooks/post-receive.sample để sao chép? Trong kho git trên máy cục bộ của tôi, tôi có một post-update.sample nhưng không phải là post-receive.sample. Hơn nữa, khi tôi tạo thư mục mkdir /Users/me/Sites/nginxjekyll/_site/.git/ trên máy chủ từ xa của mình, nó không tạo tệp post-update.sample trong đó.

Bạn có thể làm rõ các hướng dẫn này cho tôi nếu bạn có thời gian không. Cảm ơn bạn trước.

Trả lời

6

Câu hỏi 1: Chúng đang đề cập đến người dùng trên máy chủ từ xa.

Câu hỏi 2: Điều này phụ thuộc, hai tình huống: 1. Bạn sẽ cần phải thêm khóa công khai của người dùng cục bộ để đẩy tới máy chủ từ xa của bạn. 2. Bạn sẽ cần phải thêm một khóa công khai cho một người dùng cục bộ chạy hook sau khi nhận nếu một ssh được yêu cầu triển khai đến một máy chủ khác. Nhiều khả năng chỉ có 1 là mối quan tâm của bạn và 2 không phải vì máy chủ từ xa sẽ chứa repo git từ xa và máy chủ www.

Điều này có nghĩa là bạn thêm khóa công khai vào tệp authorized_keys trong môi trường linux/unix. Tệp này thường nằm trong /home/$USER/.ssh/authorized_keys Tệp authorized_keys nằm trong cùng thư mục với tệp known_hosts cho người dùng.

Câu hỏi 3: Họ đang giải thích cách thiết lập kho lưu trữ git từ xa. Nó không cần phải ở cùng một đường dẫn như kho lưu trữ cục bộ của bạn.

OK - bây giờ để làm rõ những gì đang thực sự xảy ra ở đây. Hướng dẫn này dạy bạn cách thiết lập kho lưu trữ từ xa sẽ triển khai cài đặt jekyll mỗi khi nó được đẩy tới.

Điều này có nghĩa là nếu bạn có repo github, bạn không thể thiết lập móc phía máy chủ ở đó. Thay vào đó bạn sẽ thiết lập một điều khiển từ xa mới trên máy chủ từ xa của bạn. Vì vậy, nói rằng bạn đăng nhập vào máy chủ của bạn (với ssh thường), chạy pwd học đường dẫn đầy đủ của bạn hoặc đặt nó trong một biến môi trường:

$DIR=`pwd` 

Bây giờ bạn có thể tạo một repo trần trên máy chủ này:

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

Bây giờ bạn có kho lưu trữ git trống từ xa trên máy chủ của mình. Tiếp theo, bạn cần phải thêm móc cho phép nó triển khai trang web Jekyll của bạn khi nhận được một cú đẩy. Trang web bạn đã liệt kê có triển khai khá đơn giản, nhưng về cơ bản tất cả những gì nó làm là tạo trang _site cho các trang html được phân phát, bạn có thể thực hiện theo một số cách, tôi khuyên bạn nên làm điều đó mà không làm gián đoạn người dùng của bạn càng nhiều càng tốt, tại đây là một tập lệnh mẫu có thể làm một việc như vậy:

#!/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 -s $WWW_ROOT/new_current $WWW_ROOT/releases/$DATE && mv $WWW_ROOT/new_current $WWW_ROOT/current 

exit 0 

Điều gì đó tương tự sẽ là triển khai tốt. Nếu bạn lưu tập lệnh này trên máy chủ từ xa của mình trong tập tin móc/sau khi gửi lại, thì nó sẽ chạy mỗi khi kho lưu trữ được đẩy đến. Chỉ cần nhớ để làm cho nó thực thi: chmod 755 hooks/post-receive Vì vậy, nếu bạn thêm từ xa mới này để repo git của bạn với:

git remote add DEPLOY_PROD [email protected]:/path/to/bare/repo 

Sau đó git push DEPLOY_PROD - nó sẽ đẩy tới của bạn từ xa và sau đó repo từ xa của bạn sẽ cháy của nó sau khi nhận móc và sau đó sao chép các repo trần xuống một thư mục bảo trì có thể được thổi bay đi tại hầu như bất kỳ điểm nào. Thư mục này sau đó được sử dụng để cp các trang web dir đến một thư mục phát hành và sau đó được liên kết đến thư mục chính.

Tất nhiên tất cả điều này có khả năng là quá mức cần thiết và bạn chỉ có thể tạo tập lệnh triển khai chạy từ máy chủ lưu trữ cục bộ để thực hiện tất cả điều này qua ssh.

Vấn đề là bạn không thể chạy móc máy chủ trực tiếp từ github cho phương pháp này để bạn phải làm việc xung quanh nó. Tôi sẽ đề nghị bạn kiểm tra capistrano như một chiến lược triển khai - hiện tại/phát hành/chia sẻ dirs và git_maint dir được lấy từ lược đồ của họ, nó hoạt động tốt.

Hãy cho tôi biết nếu bạn muốn được trợ giúp ở đây, tôi có rất nhiều kinh nghiệm trong việc triển khai các chiến lược triển khai và tự động triển khai, do đó tùy thuộc vào hoàn cảnh của bạn, mọi thứ sẽ thay đổi.

+0

Cảm ơn, tôi sẽ thử và cho bạn biết cách hoạt động. Đánh giá cao sự giúp đỡ của bạn. – Leahcim

+0

không có tệp sau khi nhận trong thư mục móc trong git repo. Chỉ có 'applypatch-msg.sample post-update.sample pre-commit.sample pre-rebase.sample commit-msg.sample pre-applypatch.sample chuẩn bị-commit-msg.sample update.sample' – Leahcim

+0

bạn có thể tạo tập tin này - nó chỉ là một tập lệnh sẽ chạy sau khi git nhận được gói. Chỉ cần đặt tên cho nó sau khi nhận - git sẽ làm phần còn lại. – Michael