2015-09-08 38 views
2

我不是100%確定最佳實踐是在我的情況下,以及我是否將鉤子設置在錯誤的地方。Git + Jenkins構建鉤子 - 跨多個服務器的遠程分支

我的架構/工作流程如下(簡化):

Git Repos - //SERVER-NAME/e$/repositories/PROJECT-NAME 

然後我有自己的服務器上的兩個遠程分支:

DEV - //DEV-SERVER/e$/projects/PROJECT-NAME 
UAT - //UAT-SERVER/e$/projects/PROJECT-NAME 

所以,讓我們假設工作是直接在完成DEV服務器。當完成並提交時,我希望該提交觸發來自同一服務器上的DEV分支的構建(Jenkins正在DEV和UAT服務器上運行)。

在jenkins的Configure部分,我在'Repository URL'部分有上面的Git Repos URL,在'Branches to build'有'DEV'。

在檢出/複製DEV分支

,我有以下內容的post-commit鉤子:

#!/bin/sh 
curl http://localhost:8080/job/PROJECT-NAME/build?delay=0sec 

然而,據推測這是檢查出/克隆還未接收到遠程DEV分支承諾的變化?然後,我試圖改變掛鉤'後接收'的想法,這將被觸發後,將觸發

git push origin DEV 

但這並沒有觸發。

然後我認爲鉤子可能需要在實際的遠程倉庫的鉤子目錄中,但我不確定是否A)這是正確的,如果是的話B)鉤子應該包含什麼 - 可能是一個URL啓動DEV服務器上的構建?

有點糊塗了......

另外,我想在UAT服務器上運行一樣。我想工作流程是

  1. 提交的DEV
  2. 上觸發DEV構建(包括單元測試等)
  3. 合併DEV與UAT
  4. 上觸發UAT
  5. 構建
  6. 合併UAT與主
  7. 標籤創建併發布到現場。

我不確定上面的工作流是否會更好,因爲只有在git合併到主服務器上時才運行UAT服務器上的構建(但是在它合併之前,只合併成功構建)?

謝謝..

+0

'post-receive'鉤子是一個遠程服務器鉤子,因此它應該位於遠程服務器('/ SERVER-NAME/e $/repositories/PROJECT-NAME')的鉤子目錄中。當該鉤子被觸發時,推送的提交應該在遠程服務器上可用。 push命令將等待掛鉤完成,因此您應該避免在掛鉤中使用長時間運行的命令(如果觸發jenkins構建不是異步的,我不確定) – joran

+0

在DEV和UAT上同時擁有Jenkins的目的是什麼? – joran

+0

那麼它可能不需要同時存在 - 並且以某種方式成爲我問題的一部分,至於我的工作流是否不是實現我所要做的最好方法?我猜想我的問題的後半部分是前進的方向 - 做一個推動主人的建設,但只是想弄清楚如何做到最好。 –

回答

1

從我的評論:一個後收到鉤是一個遠程服務器掛鉤,所以它應位於你的遠程服務器(// SERVER-NAME/E $ /存儲庫的hooks目錄/項目名)。當該鉤子被觸發時,推送的提交應該在遠程服務器上可用。

什麼是你的項目的最佳工作流程取決於如此之多的東西,如果你有一個工作與此並調整它,或嘗試另一種方式做事情,當它開始癢。

在這種情況下的替代工作流程可能是有詹金斯查詢您的回購新提交遠程服務器上:

  1. 詹金斯池DEV branch和新的提交觸發一次構建(和測試)
  2. 在成功詹金斯推DEV branchUAT branch
  3. 詹金斯池UAT branch和新的提交觸發構建工作
  4. 成功詹金斯推
  5. 詹金斯池masterUAT branchmaster和新的提交觸發作業標籤和釋放生活

你可能有這樣的工作流程不符合要求,如公佈所有提交主回購,在應用於UAT之前推送到開發服務器。