2011-09-05 64 views
24

我們有一個VPS上的linode和代碼託管在gitHub上。當我們推送到gitHub時,我們如何設置,它也會自動推送到我們的linode服務器。我們在linode服務器上使用PHP。自動從GitHub部署到服務器上推

謝謝。

+0

可能獲得更多幫助發佈此http://serverfault.com/ – sashang

回答

21

您可能要使用GitHub's post-receive hooks

總之,當有人推銷回購協議時,GitHub將張貼到提供的URL。只需編寫一段簡短的PHP腳本即可在您的linode VPS上運行,並在收到所述POST時從GitHub中啓動。

+0

這聽起來不錯,但你如何從PHP「從github」拉? –

+1

我假設有一些圖書館存在,但在最壞的情況下,更多地使用'exec'而不是理想 –

+0

感謝您的額外洞察克里斯蒂安! –

13

我在python中編寫了一個小型的Github-Auto-Deploy服務器,它完全符合你的要求。

  • 在配置文件在Github上輸入你的域名到一個新的post-receive service hook
  • 如同庫URL的本地庫路徑
  • 服務器將收到的本地倉庫路徑
  • 從GitHub和運行git引入請求它還運行一個shell腳本以供部署之後,如果你提供一個
+2

你的lib激勵我開始實施我自己的。 https://github.com/danneu/captain-githook。好東西,夥計。 – danneu

3

我最終創建了我自己的基本部署工具(很像Karl,但在PHP中) d自動從回購下拉新更新 - https://github.com/jesalg/SlimJim - 基本上它會偵聽github post-receive-hook並使用代理來觸發更新腳本。

2

也許我是斷章取義的,但我更喜歡手動選擇從哪裏我的命令行如推:git push linode

要做到這一點,我在我的Linode服務器上創建一個存儲庫容器,並創建了一個後收到鉤該檢出我的文件夾,最後推提交

/var/repo/hooks/ touch post-receive nano post-receive chmod +x post-receive

創建一個混帳回購協議容器 mkdir /var/repo && cd /var/repo git --bare init

創建後收到鉤

後接收內容 #!/bin/sh git --work-tree=/var/www/ --git-dir=/var/repo checkout -f

在你的本地庫 git remote add linode [email protected]<linode ip|domain>:/var/repo git push linode

代碼現在部署

+0

有趣。謝謝你。我會按照Linode的建議不要使用@root用戶。這需要在git repo目錄和/ var/www上放寬權限。我在這裏找到了如何做到這一點的相關信息:http://stackoverflow.com/a/6448326/2112538 –

0

你可以參考這個教程:
Automatically Updating Your Website Using GitHub's Service Hooks

總之它解釋以下步驟:

創建一個php文件.git文件夾在您的服務器與以下內容。

<?php `git pull`;?> 

設置您對於S SH鍵服務器存在。例如:

key. cat ~/.ssh/id_rsa.pub 

在GitHub上設置服務鉤子。輸入網絡掛接網址

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

當所有設置。每次推送到GitHub時,該文件都將在您的服務器上部署所有工作。