2017-08-04 104 views
0

我們使用jenkins管道dsl作爲我們的工作描述。現在我們有這樣的事情:跳過jenkins管道中的一個階段而無需調用代理?

pipeline { 
    agent none 

    options { 
    timestamps() 
    } 

    environment { 
    //SOME ENV VARS 
    } 

    stages { 
    // more stages 
    stage('stage1'){ 
    when { 
     expression { env.BRANCH_NAME == 'master' } 
     } 
    agent { label 'slave1' } 
    steps{ 
     //doing stuff 
    } 
    } 
} 

在構建過程中,當主分支建立應該只運行一個階段,你能想到的在方向上的部署工作什麼的。問題是,我們擁有特定標籤的代理商的資源是有限的。當我們構建其他分支時,該作業仍然會調用slave1代理,並在分支不是主控之後跳過舞臺。這很糟糕,因爲當所有slave1代理正在執行主分支作業時,其他作業將不得不等待slave1代理可用才能檢查它是否需要運行該階段。

jenkins管道DSL有沒有什麼辦法可以在不等待slave1代理確定分支的情況下跳過該階段?

+0

您是否在流水線的頂層聲明瞭'agent none',即*在*'stages'之前? – SevenEleven

+0

是的,我有。見編輯 – Taron

+1

這是多分支管道?如果是這樣,請嘗試使用'when'branch'master'}' – Nexus

回答

1

我找到了適合我的解決方案。雖然我不太清楚爲什麼。 然而,引入並行部分並使用節點解決了問題,並且跳過了階段,而無需首先調用代理。請參閱修改後的管道:

pipeline { 
    agent none 

    options { 
    timestamps() 
    } 

    environment { 
    //SOME ENV VARS 
    } 

    stages { 
    // more stages 
    stage('stage1'){ 
    when { branch 'master' } 
    steps{ 
     parallel(
     'Job1': { 
      node('slave1'){ 
      //doing stuff 
      } 
     } 
    ) 
    } 
    } 
} 
相關問題