2011-10-25 81 views
9

我有一個任務在基於標籤的n機器上執行。如果出於某種原因,其中一些機器處於脫機狀態,我不希望Jenkins將它們放入隊列中,並等待它們在線。我想讓詹金斯在剩下的機器上執行這項工作並完成工作。有什麼建議麼?Jenkins:如果節點處於脫機狀態,則跳過

編輯1: 我意識到,這份工作被綁定到所有的機器: Screenshot

我不得不這樣做,因爲我需要這個工作在所有計算機上同時運行。所以,我的問題依然如此。如果其中一些機器處於脫機狀態,我想跳過這些工作,而不是等待/排隊。

編輯2: 詹金斯CLI有一個清除隊列命令。這段時間看起來很有希望。

+0

我在Jenkins上打開了一個功能請求,允許Matrix Project跳過脫機節點:[https://issues.jenkins-ci.org/browse/JENKINS-29380](https://issues.jenkins-ci.org/瀏覽/ JENKINS-29380)。如果這就是你需要的,請注意它。 –

回答

0

如果任務的連接方式只能在特定節點上運行,它將無法在其他機器上運行。

如果不是這種情況,那麼任務將在任何可用的執行程序上運行,這是默認行爲。

因此,爲了檢查任務是否可以在其他節點上運行,請轉到作業>配置並檢查以下設置。

enter image description here

如果被禁用的任務,那麼你將需要檢查他們接受這可以在節點的設置中找到任何作業的節點。它應該如下所示。

enter image description here

古德勒克。

+0

對不起,在閱讀你的答案後,我仔細檢查了配置。我實際上將所有機器都綁定到這個工作上,強制它在所有機器上同時運行。 – publicRavi

+0

@publicRavi如果這有助於將其標記爲正確答案,以便其他人知道。 – myusuf3

+0

我不明白這是如何解決在離線節點的Axis上卡住的Matrix項目的問題(在節點重新聯機之前一直在隊列中等待)? –

7

的罰款解決方案可以使用GroovyAxis Plugin實現和下面的腳本,將返回的在線奴隸只有軸列表:

def axis = [] 
for (slave in hudson.model.Hudson.instance.slaves) { 
if (slave.getComputer().isOnline().toString() == "true") { 
    axis += slave.name 
} 
} 
return axis 

UPDATE: 由於詹金斯2.0節點API有被改變了,所以用Node.toComputer()代替: http://javadoc.jenkins-ci.org/hudson/model/Node.html#toComputer%28%29

def axis = [] 
for (slave in jenkins.model.Jenkins.instance.getNodes()) { 
if (slave.toComputer().isOnline()) { 
    axis += slave.getDisplayName() 
} 
} 
return axis 
+0

請注意,此列表將不包含主人。如果您想要添加它,例如用'def axis = ['master']'替換'def axis = []''。 –

+0

因爲這是在Groovy中運行的,所以你也可以說'jenkins.model.Jenkins.instance.nodes' – jpyams

相關問題