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

Jenkins声明式流水线如何实现仅重跑失败的并行子stage?

解决方案

核心实现思路

  • 为每个并行子stage生成独立的成功状态标记,stage执行前先判断标记是否存在,存在则自动跳过执行
  • 用catchError捕获单个子stage的执行失败,保证整个流水线可完整运行到结束,不会中途阻塞
  • 重跑时自动复用历史构建的成功状态标记,仅运行无成功标记的失败子stage,无需修改原生构建逻辑

完整流水线示例

pipeline {
  agent any
  options {
    parallelsAlwaysFailFast false
  }
  stages {
    stage('加载历史执行状态') {
      steps {
        script {
          // 自动拉取上一次构建的成功状态标记,需提前安装Copy Artifact插件
          def lastBuild = currentBuild.previousBuild
          if (lastBuild?.artifacts?.any { it.fileName.startsWith('status/') }) {
            copyArtifacts(
              projectName: env.JOB_NAME,
              selector: specific(lastBuild.id),
              filter: 'status/**',
              target: '.'
            )
          }
        }
      }
    }
    stage('Meta Data Creation') {
      parallel {
        stage('Activity Category Type') {
          when {
            not { fileExists 'status/activity_category_type.success' }
          }
          steps {
            script {
              catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
                // 替换为实际业务执行逻辑
                sh 'echo 执行Activity Category Type相关逻辑'
                // 执行成功写入标记文件
                sh 'mkdir -p status && touch status/activity_category_type.success'
              }
            }
          }
        }
        stage('Campaign') {
          when {
            not { fileExists 'status/campaign.success' }
          }
          steps {
            script {
              catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
                // 替换为实际业务执行逻辑
                sh 'echo 执行Campaign相关逻辑'
                // 执行成功写入标记文件
                sh 'mkdir -p status && touch status/campaign.success'
              }
            }
          }
        }
        // 其余并行子stage按上述格式补充即可
      }
    }
    // 其余父stage按上述逻辑实现即可
  }
  post {
    always {
      // 归档所有成功状态标记,供重跑时拉取
      archiveArtifacts artifacts: 'status/**', allowEmptyArchive: true
    }
  }
}

使用说明

  1. 首次触发流水线时无历史状态标记,所有stage全量执行
  2. 流水线完全执行结束后若存在失败的并行子stage,直接点击重新构建即可:流水线会自动识别已成功的子stage并跳过,仅运行失败的子stage,无需额外操作
  3. 若无需自动拉取历史状态,可删除「加载历史执行状态」stage,重跑前手动将上一次构建归档的status目录解压到当前工作空间即可,效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:03