2014-02-11 100 views
0

我有一個Jenkins作業,它在Jenkins之外啓動了一個長時間運行的過程。這項工作本身由Gerrit觸發。阻止已觸發的Jenkins作業,直到* Jenkins完成*

如果在長時間運行過程中再次觸發此作業,我需要確保作業保留在Jenkins隊列中,直到完成所有過程。實際上,我希望確保這項工作永遠不會與自己並行運作,而「工作」真的是詹金斯的工作以及外部長期運行的過程。

我找不到任何方法來實現這一點。外部資源調度程序插件似乎可以工作,但每次我們在我們的系統上配置它時,Jenkins都非常不穩定(拒絕頁面加載數分鐘,奴隸線程與NPE相遇)。我可以看到的其他所有內容(例如Exclusions插件)都依賴於Jenkins本身來控制整個工作。

我試過用節點標籤篡改某些東西 - 讓作業依賴於標籤「can_run」,將該標籤分配給主控,然後讓該作業執行一個從主控中移除該標籤的Groovy腳本。 (理論上,Jenkins的另一項工作是將標籤添加回來,這將在長時間運行的過程結束時觸發)。但是這並不奏效:如果Jenkins上有任何排隊的工作實例,他們就會去即使標籤已被刪除,也立即開始。

我不知道還有什麼要嘗試!是否有其他任何比所需的節點標籤丟失,這將導致詹金斯隊列工作,如果它被觸發,但不是開始它?

回答

0

我想長時間運行的過程被觸發,你的工作立即返回,這使得它成爲一個異步過程,對吧?我建議你在觸發過程中處理長時間運行的過程檢測和等待邏輯。每次觸發作業之前,請檢查長時間運行的進程是否正在運行,如果沒有,則觸發它。

其實我並不完全明白你想要做什麼。基本上由於這個長期運行的過程,你不可能同時運行2個作業。如果這是真的,那麼使它成爲非平行工作。

相關問題