You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins并行阶段中重启单个子阶段?

解决Jenkins并行阶段内子阶段单独重启的问题

默认情况下,Jenkins Declarative Pipeline的parallel块会被视为单一阶段单元,因此只能重启整个并行阶段,无法直接选择内部嵌套子阶段。要实现从并行内的中间子阶段(比如你的Stage D_2)重启,可采用以下两种方案:

方案1:调整结构,将嵌套子阶段转为独立并行分支

如果可以接受改变原有嵌套串行的执行逻辑(比如让C_1、C_2和D的子阶段都并行执行),可将原来嵌套在父阶段内的子阶段直接移到parallel块下作为独立分支,每个子阶段会成为可单独重启的单元。

修改后的流水线代码:

pipeline 
{
    agent any
    options {
        restartFromStage() // 启用阶段重启功能
    }
    stages {
        stage('Stage A') {
            agent any
            steps {
                sh """#!/bin/csh
                echo "Currently running A"
                """
            }
        }
        stage('Stage B') {
            agent any
            steps {
                sh """#!/bin/csh
                echo "Currently running B"
                """
            }
        }
        stage('Stage parallel') {
            parallel {
                stage('Stage C_1') {
                    steps {
                        sh """#!/bin/csh
                        echo "Currently running C1"
                        """
                    }
                }
                stage('Stage C_2') {
                    steps {
                        sh """#!/bin/csh
                        echo "Currently running C2"
                        """
                    }
                }
                stage('Stage D_1') {
                    steps {
                        sh """#!/bin/csh
                        echo "Currently running D1"
                        """
                    }
                }
                stage('Stage D_2') {
                    steps {
                        sh """#!/bin/csh
                        echo "Currently running D2"
                        """
                    }
                }
                stage('Stage D_3') {
                    steps {
                        sh """#!/bin/csh
                        echo "Currently running D3"
                        exit 1
                        """
                    }
                }
            }
        }
    }
}

方案2:启用restartFromStep保留原有结构

如果需要保持原有的嵌套串行逻辑(比如C_1执行完成后才执行C_2),可在流水线中启用restartFromStep选项,该功能支持从嵌套子阶段重启,依赖Jenkins 2.222+版本及Pipeline: Stage Step等相关插件的支持。

修改后的流水线代码:

pipeline 
{
    agent any
    options {
        restartFromStep() // 启用从步骤/子阶段重启的功能
    }
    stages {
        stage('Stage A') {
            agent any
            steps {
                sh """#!/bin/csh
                echo "Currently running A"
                """
            }
        }
        stage('Stage B') {
            agent any
            steps {
                sh """#!/bin/csh
                echo "Currently running B"
                """
            }
        }
        stage('Stage parallel') {
            parallel {
                stage('Stage C') {
                    stages {
                        stage('Stage C_1') {
                            steps {
                                sh """#!/bin/csh
                                echo "Currently running C1"
                                """
                            }
                        }
                        stage('Stage C_2') {
                            steps {
                                sh """#!/bin/csh
                                echo "Currently running C2"
                                """
                            }
                        }
                    }
                }
                stage ('Stage D') {
                    stages {
                        stage ('Stage D_1') {
                            steps {
                                sh """#!/bin/csh
                                echo "Currently running D1"
                                """
                            }
                        }
                        stage ('Stage D_2') {
                            steps {
                                sh """#!/bin/csh
                                echo "Currently running D2"
                                """
                            }
                        }
                        stage ('Stage D_3') {
                            steps {
                                sh """#!/bin/csh
                                echo "Currently running D3"
                                exit 1
                                """
                            }
                        }   
                    }
                }  
            }
        }
    }
}

启用该选项后,在流水线运行界面的重启菜单中,会显示嵌套的子阶段选项,可直接选择从Stage D_2开始重启。

如果上述Declarative方案无法满足需求,也可以考虑切换到Scripted Pipeline,它提供了更灵活的控制逻辑,支持单独重启特定子阶段,但需要使用脚本式语法编写流水线。

内容的提问来源于stack exchange,提问作者Chandan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:15:51