2011-02-09 70 views
8

我的設置是一個Windows XAMPP服務器,啓用了cURL,並安裝了Git和Hudson。 Hudson每分鐘輪詢Git以尋找變化,如果發現它們,它會創建一個構建。我使用這個版本作爲我的測試服務器。這工作正常。Git後接收鉤不工作

我想設置一臺運行哈德森的力構建功能在我中心遠程倉庫後收到鉤。

我已經創建了一個叫做在鉤子目錄在我中心Git倉庫「後收到」後,收到文件,也就是從開發者的本地分支推到了一個。他們每個人都推送到中央存儲庫上的自己的分支。我希望在每次推送後立即運行post-receive構建,而不是讓Hudson每分鐘輪詢一次Git。

當我打開一個shell到遠程服務器,並運行在鉤子文件夾「後接受」,它運行。當人們將其從本地存儲庫副本推送到中央存儲庫副本時,它不會被調用。

也許我沒有解釋這個權利,但這是我理解Git的方式。

的,收到後置代號爲兩行:

#!/bin/sh 
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken 

同樣,當我打開一個外殼並運行此,它的工作原理,但是當有人推它,什麼都不會發生,直到一分鐘就少了哈德森意識到Git已經改變了,然後它就建立起來了。

我很高興澄清是否需要。任何幫助是極大的讚賞。

編輯:玩弄之後,我覺得也許後收到沒有執行,因爲裁判沒有被更新的東西嗎? git文檔說

它在所有ref已更新後在遠程存儲庫上執行一次。

這是否意味着,如果沒有更新,它不會執行?如果是這樣,我很確定事情正在更新,所以它不應該適用。

這裏是我的過程: 製作本地編輯。 提交修改。 從我的HEAD推送到名爲'mybranch'的遠程分支(不是主分支,這是檢出) 這是我希望我的鉤子執行的點。

+0

Git進程正在運行時,用戶有權執行該腳本? – jweyrich 2011-02-09 21:51:11

+0

不確定。它在我通過Git Bash運行時執行它,但當我推送它時它不執行它。我將如何檢查這些權限? – spanky 2011-02-09 21:52:55

+0

正確的權限取決於您共享存儲庫的方式以及實際配置。但是,msquared的告訴你爲所有用戶/組提供可執行權限的方式,所以如果問題確實如此,它應該可以工作。 – jweyrich 2011-02-09 21:58:12

回答

3

所有這些答案都很有用,但事實證明我需要我的PATH變量中的「bin」目錄。我只有「cmd」目錄。 PATH中增加了c:\my_path_to_git\git\bin,它工作正常。我通過反覆試驗找到了這個答案,並查看了apache錯誤日誌。感謝大家的幫助!

11

請檢查您的文件是否具有可執行權限。否則它不能執行。 像rwxr-xr-x應該就足夠了。

您可以

$ chmod +x /path/to/post-receive 
1

嘗試使用完整路徑捲曲後收到文件添加缺少的一點,因爲路徑可以是手工運行腳本時不同。

如果你想看到的是正在運行的環境後收到腳本:

#!/bin/sh 
export > file 

或只是(它會顯示ENV。推入回購後)

#!/bin/sh 
export 

還有變數,我不知道如何執行shell scrips在Windows上運行,因此#!/路徑/到/安裝/ SH代替#!/ bin/sh的可能幫助

5

您使用什麼傳輸方法推送回購?

掛鉤僅在使用'smart'傳輸協議(如ssh和http的cgi實現)時執行。對於ftp,rsync和較早的http實現等其他「啞」傳輸協議,掛鉤永遠不會執行。我假設git協議會執行鉤子,但是推動這個協議從未被認爲是一個好主意。

1

我認爲答案很簡單,你需要移動的內容後收到鉤服務器端,而不是客戶端