2011-09-05 31 views
24

Chúng tôi có VPS trên linode và mã được lưu trữ trên gitHub. Làm thế nào để chúng tôi thiết lập như vậy khi chúng tôi đẩy gitHub, nó cũng tự động đẩy đến máy chủ linode của chúng tôi. Chúng tôi đang sử dụng PHP trên máy chủ linode.Tự động triển khai từ GitHub tới máy chủ đang đẩy

Cảm ơn.

+0

Có thể nhận được nhiều trợ giúp hơn khi đăng bài này trên http://serverfault.com/ – sashang

Trả lời

21

Bạn có thể muốn sử dụng GitHub's post-receive hooks.

Tóm lại, GitHub sẽ POST tới URL được cung cấp khi ai đó đẩy tới repo. Chỉ cần viết một kịch bản PHP ngắn để chạy trên VPS linode của bạn và kéo từ GitHub khi nó nhận được POST đã nói.

+0

Điều này thật tuyệt vời, nhưng làm thế nào để bạn "kéo từ github" từ PHP? –

+1

Tôi giả sử một số thư viện tồn tại, nhưng trong trường hợp xấu nhất, sử dụng nhiều hơn 'exec' hơn lý tưởng –

+0

Cảm ơn sự hiểu biết sâu sắc hơn Kristian! –

13

Tôi đã viết một máy chủ Github-Auto-Deploy nhỏ trong python, thực hiện chính xác những gì bạn muốn.

  • Nhập tên miền của bạn đến một mới post-receive service hook trên Github
  • trận đấu đường dẫn kho lưu trữ địa phương với các url kho trong file config
  • Các máy chủ sẽ nhận được yêu cầu từ github và chạy git pull trong đường dẫn kho lưu trữ địa phương
  • Nó cũng chạy tập lệnh shell để triển khai sau đó nếu bạn cung cấp một số
+2

lib của bạn đã truyền cảm hứng cho tôi để bắt đầu thực hiện của riêng tôi. https://github.com/danneu/captain-githook. những thứ tốt, anh bạn. – danneu

3

Tôi đã kết thúc việc tạo công cụ triển khai thô sơ của riêng mình (giống như Karl nhưng bằng PHP) d tự động kéo xuống các bản cập nhật mới từ repo - https://github.com/jesalg/SlimJim - Về cơ bản nó lắng nghe github post-receive-hook và sử dụng proxy để kích hoạt tập lệnh cập nhật.

2

Có lẽ tôi ra khỏi bối cảnh, nhưng tôi thích tự chọn nơi để đẩy từ dòng lệnh của tôi ví dụ: git push linode

Để làm điều này tôi tạo một container kho trong máy chủ linode của tôi và tạo ra một cái móc sau nhận rằng Thanh toán thư mục của tôi vào cuối đẩy cam kết

Tạo vùng chứa git repo mkdir /var/repo && cd /var/repo git --bare init

Tạo hậu nhận móc trong /var/repo/hooks/ touch post-receive nano post-receive chmod +x post-receive

hậu nhận được nội dung #!/bin/sh git --work-tree=/var/www/ --git-dir=/var/repo checkout -f

Mở kho địa phương của bạn git remote add linode [email protected]<linode ip|domain>:/var/repo git push linode

mã của bạn hiện đang triển khai

+0

Thú vị. Cảm ơn vì điều đó. Tôi sẽ làm theo khuyến nghị của Linode không sử dụng người dùng @root. Điều này đòi hỏi quyền hạn hơn trên thư mục repo git và trên/var/www. Tôi đã tìm thấy các thông tin liên quan về cách thực hiện điều đó tại đây: http://stackoverflow.com/a/6448326/2112538 –

0

Bạn có thể tham khảo hướng dẫn này:
Automatically Updating Your Website Using GitHub's Service Hooks:

Nói tóm lại nó giải thích các bước sau:

Tạo một tệp php php trong .git thư mục trên máy chủ của bạn với các nội dung sau.

<?php `git pull`;?> 

Thiết lập máy chủ của bạn cho S phím SH để tồn tại.Một cái gì đó như:

key. cat ~/.ssh/id_rsa.pub 

Thiết lập móc dịch vụ trên GitHub. Nhập URL của WebHook:

http://your.domain.com/path/to/yourfile.php 

Khi tất cả được đặt. Tệp sẽ triển khai tất cả công việc trên máy chủ của bạn mỗi lần bạn chuyển sang GitHub.

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