2017-08-04 77 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 
      } 
     } 
    ) 
    } 
    } 
} 
相关问题