首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Jenkins中如何在动态管道中使用failFast

在Jenkins中如何在动态管道中使用failFast
EN

Stack Overflow用户
提问于 2019-09-20 18:05:12
回答 4查看 11.6K关注 0票数 9

我有具有动态并行阶段的流水线,我希望我的流水线在任何阶段失败的情况下都能快速失败。我尝试添加failFast: true,但我的管道卡在“在阶段ABC失败”。

代码语言:javascript
运行
复制
  stage("Deploy") {             
        steps {
            script {
                def stages = createStages("Name", "Project")
                fastFail: true
                for (stage in stages) {                        
                    parallel stage                      
                }
            }
        }
    }
EN

回答 4

Stack Overflow用户

发布于 2019-11-27 19:23:59

解决方案:在Jenkins管道上使用failFast标志。

来自 的

您可以强制并行阶段在其中一个失败时中止所有阶段,方法是将failFast true添加到包含该并行的阶段。

请注意,如果代理节点在每个作业中启动,所有作业都将被触发并退出(如果其中一个失败)(如果流水线中的作业'a‘失败,但作业'b’仍在寻找节点且尚未启动,则它将继续-这是边缘情况)。注意,如果代理节点在每个作业中启动,所有作业将被触发并退出(如果其中一个失败)(如果管道中的作业‘a’失败,但作业‘b’仍在寻找节点且尚未启动,则它将继续-这是边缘情况)。

Examples - options包括:

选项管道中的1.Use parallelsAlwaysFailFast方法:

代码语言:javascript
运行
复制
pipeline {
agent any
options {
    parallelsAlwaysFailFast()
}
stages {
    stage('Non-Parallel Stage') {
        steps {
            echo 'This stage will be executed first.'
        }
    }
    stage('Parallel Stage') {
        when {
            branch 'master'
        }
        parallel {
            stage('Branch A') {
                agent {
                    label "for-branch-a"
                }
                steps {
                    echo "On Branch A"
                }
            }
            stage('Branch B') {
                agent {
                    label "for-branch-b"
                }
                steps {
                    echo "On Branch B"
                }
            }
            stage('Branch C') {
                agent {
                    label "for-branch-c"
                }
                stages {
                    stage('Nested 1') {
                        steps {
                            echo "In stage Nested 1 within Branch C"
                        }
                    }
                    stage('Nested 2') {
                        steps {
                            echo "In stage Nested 2 within Branch C"
                        }
                    }
                }
            }
        }
    }
}

2.在并行使用failFast true之前使用

代码语言:javascript
运行
复制
stage('Parallel Stage') {
        when {
            branch 'master'
        }
        failFast true
        parallel {

3.在map中配置作业,并在打开failFast属性的情况下执行。

代码语言:javascript
运行
复制
 jobsList = [
    {job: 'jobA', parameters: [booleanParam(name: 'flag', value: true)]},
    {job: 'jobB', parameters: [booleanParam(name: 'flag', value: true)]}
 ]

 jobsList.failFast = true
 parallel(jobsList)
票数 19
EN

Stack Overflow用户

发布于 2020-06-11 06:02:36

我无法回复@avivamg提供的答案,但我无法直接使用他/她的解决方案。这对我很有效:

代码语言:javascript
运行
复制
stages.failFast = true
parallel stages

或者在你的例子中:

代码语言:javascript
运行
复制
stage("Deploy") {             
        steps {
            script {
                def stages = createStages("Name", "Project")
                stages.fastFail = true
                // I'm not sure if the for loop will work as failFast is on the map
                // so if that doesn't work then you could use this instead:
                // parallel stages
                for (stage in stages) {                        
                    parallel stage                      
                }
            }
        }
    }
票数 2
EN

Stack Overflow用户

发布于 2021-10-20 15:33:31

如果您正在使用脚本管道,那么您需要将failFast添加到并行步骤中,如下所示-

代码语言:javascript
运行
复制
    stage('SomeStage') {
    parallel (
        "Process1" : { //do something },
        "Process2" : { //do something else },
        failFast: true
    )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58026189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档