首页 > 解决方案 > 如何在 Jenkins 的动态管道中使用 failFast

问题描述

我有具有动态并行阶段的管道,如果任何阶段失败,我希望我的管道快速失败。我尝试添加 failFast: true 但我的管道卡在“在 ABC 阶段失败”。

  stage("Deploy") {             
        steps {
            script {
                def stages = createStages("Name", "Project")
                fastFail: true
                for (stage in stages) {                        
                    parallel stage                      
                }
            }
        }
    }

标签: jenkinsjenkins-pipelinefail-fast

解决方案


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

来自文档failFast您可以通过将true 添加到包含并行的阶段来强制您的并行阶段在其中一个失败时中止。

请注意,如果代理节点在每个作业中启动,所有作业都将被触发并退出(如果一个失败)(如果管道中的作业“a”失败但作业“b”仍在寻找节点但尚未启动,它将继续 - [这是一个极端情况])。

示例-选项包括:

1 .在您的选项管道中使用 parallelsAlwaysFailFast 方法:

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

stage('Parallel Stage') {
        when {
            branch 'master'
        }
        failFast true
        parallel {

3.在地图中配置作业并在failFast属性开启的情况下执行。

 jobsList = [
    {job: 'jobA', parameters: [booleanParam(name: 'flag', value: true)]},
    {job: 'jobB', parameters: [booleanParam(name: 'flag', value: true)]}
 ]

 jobsList.failFast = true
 parallel(jobsList)

推荐阅读