2012-05-10 27 views
7

Trước khi tôi bắt đầu, tôi biết có rất nhiều câu hỏi tương tự như câu hỏi này, nhưng tôi thực sự gặp khó khăn trong việc tìm kiếm một thực hành ngắn gọn, an toàn và tốt nhất vì phản hồi về chúng đã rất đa dạng.Làm thế nào để bạn thực hiện thao tác kéo git tự động trên máy chủ từ xa?

Điều tôi muốn làm: 1) Hoàn thành công việc trên máy cục bộ của tôi trên chi nhánh phát triển. 2) Đẩy các thay đổi vào git. Git đăng lên URL webhook và tự động có máy chủ từ xa của tôi kéo các thay đổi trên trang web phát triển. 3) Sau khi QA'd và được xác nhận là thích hợp trên trang web phát triển, hãy đẩy chi nhánh chính vào vị trí sản xuất (trên cùng một máy chủ với trang web phát triển).

Tôi đang ở đâu: Tôi đã cài đặt git trên máy cục bộ và máy chủ từ xa. Tôi có thể đẩy mod vào nhánh phát triển thành git. Trên máy chủ từ xa, tôi có thể kéo các bản cập nhật và nó hoạt động như một sự quyến rũ. Vấn đề là tôi không thể nhận được máy chủ từ xa để tự động cập nhật khi các thay đổi được đẩy từ máy cục bộ của tôi.

Câu hỏi của tôi là: 1) Đối với thư mục trang web phát triển máy chủ từ xa, tôi có nên git init hoặc git init --bare không? Tôi không có kế hoạch có bản cập nhật được thực hiện trên chính máy chủ. Tôi muốn đội ngũ dev của tôi làm việc tại địa phương và đẩy mod vào máy chủ. Tôi tin rằng tôi cần phải sử dụng git init như cây làm việc là cần thiết để thiết lập một bí danh từ xa để kho git, nhưng tôi muốn xác nhận. 2) Tôi khá chắc chắn bài đăng trên web từ vấn đề git là do đặc quyền của người dùng. Làm thế nào tôi có thể an toàn giải quyết vấn đề này? Tôi đã đọc nhiều hướng dẫn đề nghị cập nhật các tập tin git hook, nhưng tôi cảm thấy như thể đó là quyết liệt hơn của một biện pháp hơn tôi cần phải thực hiện. Tôi rất muốn có thể có webhook đánh một URL mà an toàn kéo các tập tin mà không cần thêm một boatload mã (nếu có thể).

Tôi là một nhà phát triển web theo bản chất, do đó, các nhiệm vụ git và sysadmin thường là nguyên nhân của sự tồn tại của tôi. Một lần nữa, tôi biết câu hỏi này tương tự như câu hỏi khác, nhưng tôi vẫn chưa tìm được cách tiếp cận toàn diện, súc tích, an toàn và hợp lý nhất để giải quyết vấn đề. Tôi khoảng 16 giờ và đã chính thức nhấn điểm "đi vòng kết nối không có tiến bộ".

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn!

+0

Wow nó là loại không thể tìm thấy một giải pháp đơn giản cho việc này. Làm cho tôi nhớ SVN một chút ... – Jake

Trả lời

2

Tôi có cùng một vấn đề chính xác, kỹ năng mã và phát triển mạnh, yếu về kỹ năng sysadmin. Khi tôi cuối cùng đã sẵn sàng để đẩy mã, tôi phải yêu cầu một phương thức được đề xuất là GitHub và họ đã trả lời bằng Capistrano. Đây là ứng dụng Ruby chạy các lệnh (chẳng hạn như git pull) trên các máy chủ từ xa, cùng với nhiều lệnh khác mà bạn có thể tưởng tượng.

Dưới đây là một vài điều bạn có thể đọc để có được biết thêm:

Không nói dối, những học ing đường cong là khá dốc, nhưng một khi bạn bắt đầu làm việc với Capistrano, bạn sẽ thấy rằng nó hoạt động tốt cho việc đẩy mã. Tôi phát triển các ứng dụng của mình trong Symfony và tôi đã cài đặt Capistrano để kéo mã, xóa bộ nhớ cache và các tệp nhật ký rõ ràng, tất cả trong một lệnh từ máy cục bộ của tôi.

+1

Trợ giúp này ở tất cả? –

9

Bạn có thể thực hiện điều này khá dễ dàng với các móc dịch vụ GitHub.

Bạn sẽ cần phải tạo thêm một tệp để xử lý quá trình thực hiện kéo git. Thêm một tập tin mới, được gọi là github.php (hoặc bất cứ điều gì bạn muốn), và thêm:

<?php `git pull`; 

Lưu tập tin đó, và tải nó lên thư mục kho lưu trữ trên máy chủ của bạn. Sau đó, truy cập Services Hooks -> Post-Receive URL và sao chép URL vào tệp đó và dán URL đó vào “URL nhận sau”, ví dụ: http://demo.test.com/myfolder/github.php

Vì vậy, khi bạn đẩy, GitHub sẽ tự động truy cập URL này, do đó khiến máy chủ của bạn thực hiện git pull.

Để thấy điều này trong nhiều chi tiết để đi đến this tutorial

+0

Nó hoạt động tuyệt vời. – Lokesh

Các vấn đề liên quan