Tự động kích hoạt Git Kéo cho trang web trên Github Push


8

Tôi vừa hoàn thành việc thiết kế lại môi trường phát triển trang web của mình để có tất cả mã nguồn của mình trong Github và đã quản lý để thiết lập Git trên máy chủ từ xa để chỉ cần chạy git pull origin masterlệnh trên máy chủ web sẽ cập nhật toàn bộ mã nguồn ứng dụng từ Github kho.

Những gì tôi đang cố gắng tìm ra bây giờ là một cách để tự động hóa quá trình. Mã được lấy từ nhánh Master luôn có sẵn mã để triển khai và đã trải qua quá trình thử nghiệm. Khi tôi đẩy mã đến nhánh Master, tôi muốn sử dụng một trong các hook Github để tự động chạy pull từ máy chủ để cập nhật ứng dụng.

Tôi có quyền truy cập SSH vào máy chủ và có thể chạy lệnh thủ công mỗi lần tôi cần vào lúc này nhưng việc đẩy mã vào Github tốn thời gian, sau đó mở kết nối SSH đến máy chủ và kéo mã cập nhật.

Không chắc chắn nếu có một tính năng gốc trong Git hỗ trợ điều này hoặc nếu tôi cần sử dụng web hook và chạy tệp trên máy chủ web để kích hoạt git pull origin masterlệnh.

Cảm ơn

Câu trả lời:


9

Được rồi đã quản lý để tìm ra cái này. Hóa ra không có tính năng gốc trong Git để kích hoạt tìm nạp từ xa (như khi đẩy mã vào kho lưu trữ và có kho lưu trữ kích hoạt nguồn gốc kéo trên máy chủ web).

Cách tôi đã giải quyết điều này là tải tập lệnh PHP lên máy chủ web của tôi theo vhost mặc định. Trong tập tin đó tôi có nó được thiết lập để chạy shell_exec("cd /path/to/my/site/root" && sudo git pull origin master". Sau đó, nó được thiết lập để gửi cho tôi một email có đầu ra thông STDOUTbáo để thông báo cho tôi nếu việc kéo được hoàn thành thành công hay không.

Sau đó, tôi đã thiết lập Github với một webhook để mỗi lần đẩy vào kho lưu trữ sẽ kích hoạt một cuộc gọi webhook đến tệp mà tôi đơn giản đã xử lý như http://server.domain.com/github-deploy.php.

Hiện tại có một số kiểm tra bảo mật không được tiết lộ mà tôi thực hiện để đảm bảo rằng không ai khác có thể truy cập tệp và có thể tôi sẽ thêm kiểm tra IP để đảm bảo rằng các yêu cầu đối với tệp chỉ đến từ IP trong khối địa chỉ của Github.

Một lưu ý quan trọng mà tôi nên thêm ở đây là cách duy nhất để thực hiện công việc này là cho phép người dùng apache truy cập dưới dạng sudoer trên máy chủ nhưng hạn chế nó có thể chạy sudolệnh để khởi chạy Git nếu không sẽ có thông báo từ chối truy cập kích hoạt. Bằng cách hạn chế nó để git mặc dù và không chuyển bất kỳ đầu vào nào từ tập lệnh gọi vào shel_execlệnh tôi tin rằng tôi đã có thể bù đắp bất kỳ mối lo ngại nào về bảo mật.

Cuối cùng, tôi có thể sẽ thực hiện điều này như một liên kết dịch vụ với Github nhưng bây giờ điều này là quá nhiều.


9

Phục vụ trang web của bạn từ một "thư mục làm việc" git được coi là thực hành xấu - xem lý do tại đâyđây .

Cách tốt nhất để làm điều này là thiết lập một repo "trần" trên máy chủ của bạn với một hook "nhận sau". Bài viết này là những gì tôi đã làm theo khi tôi làm điều này gần đây, ý tưởng cơ bản là:

  1. Tạo một repo "trần" với git init --bare

  2. Chỉnh sửa hooks/post-receivetrong repo trần của bạn để sao chép repo vào gốc web của bạn:GIT_WORK_TREE=/var/www/yoursite git checkout -f

  3. Trên máy cục bộ của bạn thêm repo trần như một điều khiển từ xa.

  4. Sử dụng git push <remotename>để đẩy đến trang web trực tiếp của bạn.


Quan tâm để giải thích các downvote?
DisgruntledGoat

Bởi vì câu hỏi cụ thể là làm thế nào để kích hoạt git pull từ máy chủ web. Tôi hiểu rằng đây có thể không phải là cách tốt nhất để làm mọi thứ, tuy nhiên tôi đang làm nó khác đi đáng kể so với bất cứ điều gì mà bạn chỉ ra, điều đó làm cho nó trở thành một lựa chọn an toàn cho nhu cầu của tôi. Đối với câu trả lời của bạn, nó không trả lời câu hỏi mà nó cố gắng chuyển hướng câu trả lời khỏi câu hỏi ban đầu. Vì nó không trả lời câu hỏi cụ thể sẽ phù hợp hơn với một bình luận.
Chris Rutherfurd

2
Vâng, câu trả lời cho câu hỏi của bạn là "bạn không nên làm điều đó", đó là một câu trả lời hoàn toàn hợp lệ. Xin lỗi, nó không hiệu quả với bạn, nhưng hy vọng nó sẽ giúp ích cho những người khác trong tương lai.
DisgruntledGoat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.