2014-03-01 17 views
3

我正在嘗試爲使用PHP構建的組大學項目設置git開發工作流程。同步大學組項目從GitHub回購更改到個人服務器

在過去一週中,我一直在幫助團隊中的每個成員配置他們的機器,以便我們能夠將代碼協作到主存儲庫。每個開發人員現在能夠成功同步他們的機器並託管在GitHub上的遠程存儲庫之間的代碼,無論他們使用何種操作系統:

enter image description here

設置我們的工作流程的下一個部分是讓一個Apache服務器來從GitHub存儲庫中提取我們的更改。這是所以大家(甚至在球隊的非編碼器)可以看到直播時間的變化,並測試我們的系統:

enter image description here

我發現了GitHub上提供了一個很酷的功能叫做git hooks。這應該很容易讓我們將這樣的功能集成到我們的工作流程中。我繼續在服務器上安裝git,使用GitHub設置SSH密鑰並創建一個新的鉤子。

我加入這個PHP代碼到文件鉤電話:

<?php 
    $output = shell_exec('git pull origin master 2>&1'); 
    echo "<pre>$output</pre>"; 
?> 

現在,如果我把從SSH終端會話此代碼php git_pull_post_hook.php,任何在開發中的最新變化(團隊)將成功同步。但是,無論何時GitHub鉤子或其他人通過HTTP訪問php文件,都不會發生任何事情。

經過數小時的谷歌搜索,每個問題都會導致另一個問題。我已經改變了文件所有者的權限,其他線程建議,但現在這是我從腳本輸出得到(通過HTTP)錯誤:

Could not create directory '/var/www/.ssh'. 
Host key verification failed. 
fatal: The remote end hung up unexpectedly 

我猜www-data沒有足夠的權限在我們的服務器的根文件夾中訪問SSH密鑰,所以這就是導致所有這些錯誤的原因......但是/var/www/.ssh目錄確實存在於服務器上,所以我不明白這裏出了什麼問題。

可悲的是,組中沒有人知道這類事情的任何內容,也沒有任何好的指導來設置它。任何幫助/指針將不勝感激!

更新:

是VonC發佈的指南似乎是什麼,我們需要做一個合適的解決方案。我試圖刪除文件夾的.ssh,準確地跟隨每一個步驟,因爲它是指南中說,但現在我們得到以下錯誤,說明有權限錯誤:

No directory, logging in with HOME=/

[email protected]:~# mkdir /var/www/.ssh 
[email protected]:~# chmod 0700 /var/www/.ssh 
[email protected]:~# chown -R www-data:www-data /var/www/.ssh 
[email protected]:~# su - www-data -c "ssh-keygen -t rsa" 
No directory, logging in with HOME=/ 
Generating public/private rsa key pair. 
Enter file in which to save the key (/var/www/.ssh/id_rsa): 
Could not stat /var/www/.ssh: Permission denied 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
open /var/www/.ssh/id_rsa failed: Permission denied. 
Saving the key failed: /var/www/.ssh/id_rsa. 
[email protected]:~# chmod 0600 /var/www/.ssh/id_rsa 
chmod: cannot access `/var/www/.ssh/id_rsa': No such file or directory 
[email protected]:~# chmod 0600 /var/www/.ssh/id_rsa.pub 
chmod: cannot access `/var/www/.ssh/id_rsa.pub': No such file or directory 

回答

1

由於in this guide,你可能錯過了/var/www/.ssh/known_hosts文件。

touch /var/www/.ssh/known_hosts 
chown www-data:www-data /var/www/.ssh/known_hosts 
sudo -u www-data ssh github.com 

這本webjay/gh_hook.php被引用,但你必須在this gist

<?php 

// Use in the "Post-Receive URLs" section of your GitHub repo. 

if ($_POST['payload']) { 
shell_exec('cd /srv/www/git-repo/ && git reset --hard HEAD && git pull'); 
} 

?>hi 
+0

嗨VonC一個簡單的版本,感謝您的回答。本指南確實對我們有所幫助。但是,在執行指南中的命令時,我們仍然面臨許可錯誤。我已經用更多的信息更新了我的問題。如果您能夠進一步提供幫助,我們將不勝感激,因爲您確實知道自己的東西。謝謝。 –