2013-02-23 76 views
0

詹金斯方案的細節:
======================
- 構建執行人數(無論是在主/從)在詹金斯:
- 上游作業:USJob和這個工作可以在任何構建執行人運行
- 下行工作:DSJob &該作業具有120秒一個靜默期+它綁定在特定的bui上運行只有執行者。詹金斯上游 - 下游的工作 - 平靜期


  • USJob有這樣的構建步驟:回聲「生日快樂詹姆斯」 ,它需要5秒鐘就可以完成這項工作
  • DSJob有這樣的構建步驟:回聲「詹姆斯·邦德死了」 ,它需要5秒鐘就可以完成這項工作

現在,讓我們說,我們跑USJob(父母/上游作業)5倍,這將--->調用DSJob(兒童/下行作業)5次爲好,那麼,我什麼想要的是:

  1. Jenkins應運行USJob 5次,因此在每次調用期間調用DSJob子作業。
  2. DSJob不會運行DSJob(只要它從USJob調用),DSJob就會處於空閒狀態或在隊列中等待「120秒」(即設置爲安靜期)。

  3. 現在,如果我們看到這種情況,UPJob將調用DSJob 5次,並且DSJob將排隊等候,直到達到相當的時間。因此,一旦安靜時期結束,詹金斯將開始DSJob。

我的問題: 什麼我想看到的是什麼樣的設置/選項我DSJob(子作業)設置,以便DSJob只運行一次,並不在乎它是多少時調用。 換句話說:如果詹姆斯·邦德/有人死一次,他不能再死! ...... 拿到了吧!但有人可以祝他生日快樂N次在他的BDay。這個概念類似於在TFS(Team Foundation Server - 內部構建定義的TRIGGER部分)中以累積方式運行持續集成(CI)構建,即在源控制發生變化時立即運行構建BUT積累所有對源代碼控制的更改,直到正在運行的CI構建完成,下一個CI構建將選擇開發人員完成的所有其他源代碼管理更改。

回答

1

我建議以下想法:根本不要鏈接美國和DS作業。美國的工作是否做到了,完成了。讓DS作業檢查一下是否要開始。

要實現這一點,請使用Script Trigger Plugin。我用它來解決類似的需求,它效果很好!您可以完全控制觸發並使用寫得很好的腳本,您可以應用任何您想要的邏輯,從而使您可以絕對控制觸發和流動。

請注意 - 用於評估版本的腳本不必保存爲外部文件。它也可以寫入作業的配置中。 Groovy腳本也被支持。

希望這會有所幫助。

+1

我同意,因爲這是一種選擇,我最終會走這條路。感謝您分享Eldad。我們基本上不想通過在工作區中放置文件來使用,因爲我們在任何機器上的任何可用的從機上運行作業,並且不希望在可供所有機器/從機訪問的中央NAS上創建文件。另外,如果父子/上游工作完成了X狀態,我不希望子/下游工作查找,然後運行它。 – 2013-02-28 16:42:27

+0

只需注意 - 腳本不必保存爲外部文件。它也可以寫入作業的配置中。Groovy腳本也被支持。 – 2013-03-01 05:49:51

1

我同意這是一種選擇,我最終會這樣。感謝您分享Eldad。我們基本上不想通過在工作區中放置文件來使用,因爲我們在任何機器上的任何可用的從機上運行作業,並且不希望在可供所有機器/從機訪問的中央NAS上創建文件。另外,如果父子/上游工作完成了X狀態,我不希望子/下游工作查找,然後運行它。




我這樣做的方式是在DSJob上將靜默期設置爲120秒+從USJob或DSJob的任何其他父級調用「DSJob」(可以選擇傳遞/或不直接/通過屬性文件傳遞參數) +發現它工作正常。當我安排了多個USJob時,USJob第一次被稱爲DSJob,它等待了120秒(或者你想要的X秒),然後一旦USJob第一個工作完成,第二個USJob開始並完成,並且它再次調用DSJob,但是這沒有不會將新的DSJob放入隊列中,儘管它碰到了剩餘的X號。秒工作DSJob從X運行 - 無論花費多少時間,再回到X秒,這很好。我還使用了「Build Blocker插件」,但我只是用它來使我的觀點在邏輯上清晰,因爲事情就像我想使用DSJob上設置的「安靜時段」概念一樣工作。解決了!

1

如果我正確理解你,你不希望5次(快速)執行USJob後發生5次DSJob執行。您寧願讓DSJob執行一次,從末尾觸發USJob?靈感來自quiet period功能如何適用於SCM?

如果是這樣,那麼我面臨同樣的問題。我所做的就是編寫一個Groovy腳本,作爲USJob中的最後一步執行。首先,它會得到所有下游作業的列表(這將簡單地返回DSJob)。如果你不需要動態工作,你可以跳過這一步。如果這些作業中的任何一個排隊,那麼腳本會將它們從隊列中移除。然後USJob會像平常一樣觸發DSJob(再次)。

最終的結果是,如果USJob在120s的時間範圍內觸發了多次,DSJob只會觸發一次。只有USJob的最後一個觸發器纔會生效。

我是一個Groovy新手,所以我的腳本是我在網上發現的其他腳本的混亂組合。我知道有更好的方法可以做到這一點。如果這是您正在尋找的解決方案,我會發布(雜亂)腳本。

相關問題