2017-04-10 44 views
8

我使用declarative Jenkins pipelines来运行一些构建管道,并想知道是否可以定义多个代理标签。我可以在声明式Jenkins管道中定义多个代理标签吗?

我有一些建立代理挂钩到我的詹金斯,并希望能够由具有不同标签(但不是由所有代理)的各种代理构建该特定管道。

为了更具体一点,我们假设我有2个代理,标签为'small',4代表标签'medium',6代表标签'large'。现在我有一个资源非常低的管道,我希望它只在一个'小'或'中等'大小的代理上执行,但不是大规模的代理,因为它可能会导致更大的构建在队列中等待不必要很长时间。

到目前为止我看过的所有例子都只使用一个标签。 我想是这样的:

agent { label 'small, medium' } 

但失败了。

我正在使用Jenkins管道插件的版本2.5。

回答

9

你可以看到你詹金斯安装中的“管道语法的帮助,看到采样步“节点”的参考。

您可以使用exprA||exprB

node('small||medium') { 
    // some block 
} 
+2

哦,嘿,实际工作。对于声明式管道,它看起来像:agent {label'small || medium'}。谢谢。 – FrontSide

+3

不是OP要求的,但值得一提的是,AND运算符(&&)也适用于如果您需要两个标签:'node('small && medium')'并且运算符和标签之间可以有空格(更具可读性) 。 – firepol

6

编辑:我误解了这个问题。只有当您知道 您想要为每个阶段运行哪个特定代理时,此答案才是有效的。

如果您需要多个代理,您可以声明agent none,然后在每个阶段声明代理。

https://jenkins.io/doc/book/pipeline/jenkinsfile/#using-multiple-agents

从文档:

pipeline { 
    agent none 
    stages { 
     stage('Build') { 
      agent any 
      steps { 
       checkout scm 
       sh 'make' 
       stash includes: '**/target/*.jar', name: 'app' 
      } 
     } 
     stage('Test on Linux') { 
      agent { 
       label 'linux' 
      } 
      steps { 
       unstash 'app' 
       sh 'make check' 
      } 
      post { 
       always { 
        junit '**/target/*.xml' 
       } 
      } 
     } 
     stage('Test on Windows') { 
      agent { 
       label 'windows' 
      } 
      steps { 
       unstash 'app' 
       bat 'make check' 
      } 
      post { 
       always { 
        junit '**/target/*.xml' 
       } 
      } 
     } 
    } 
} 
+0

嘿。谢谢。不幸的是,那不是我想要的。如果我们考虑你在这里发布的这个管道,我希望所有的阶段都可以在linux或windows代理上执行。 – FrontSide

+0

好的,我误解了。从我读过的内容来看,我没有看到为jenkins文件声明代理子集的方法。好运 – mcalcote

+0

好的,不用麻烦了。它在声明式管道之前工作正常。拉我请求的时间。 – FrontSide

0

创建另一个标签调用“小或介质”有6个所有代理。然后在Jenkinsfile:

agent { label 'small-or-medium' } 
+0

我可以通过某种方式确认此作品。我测试它是这样的:两个节点配置稍有不同的Fedora系统。标记他们两个“fedora”。在Jenkinsfile:agent {label'fedora'}构建开始时,它会随机选择一个节点。但是如果您再次启动它,那么它会立即在下一个节点上启动。 – Freitags

4

这句法似乎为我工作:

agent { label 'linux && java' } 
+0

如果逻辑运行正常,这将意味着代理需要同时拥有两个标签才能选择此项工作,这与我所寻找的完全相反。上面接受的答案是我所需要的。谢谢,不过。 – FrontSide

+0

我错过了或者部分...我的坏处。尽管有人在寻找这两个标签,我会在这里留下。 –

相关问题