我们在工作描述中使用了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代理确定分支?
2条答案
按热度按时间voase2hg1#
接受答案中提供的方法之所以有效,是因为您没有在stage('stage1')中声明代理。相反,您在 steps 中显式创建了一个节点,因此当您检查条件时,不会创建代理。
这种方法可以工作,但它会给你的Jenkins文件增加不必要的复杂性。从Jenkinspipeline plugin version 1.2.6开始,实现这一点的正确方法是:
字符串
检查when标记文档中的语法和可用选项。
uwopmtnx2#
我找到了一个适合我的解决方案。虽然我不太确定为什么。引入一个并行部分并使用节点解决了这个问题,并且在没有首先调用代理的情况下跳过了各个阶段。请参阅修改后的管道:
字符串