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

如何在Jenkins中让Stage B定时重复运行至Stage A完成?

Jenkins Pipeline 实现Stage B循环执行直到Stage A完成

针对你的场景(Stage A执行长时间测试,Stage B定时压缩推送最新报告直到A结束),可以通过两种方式调整Pipeline配置:

方案一:通过阶段状态检查实现循环

直接利用Jenkins内置的currentBuild对象获取Stage A的执行状态,在Stage B中循环执行直到A完成:

stage("Run A and Run B") {
  parallel {
    stage('A') {
      steps {
        // 替换为你的耗时测试任务
        sh 'echo "执行耗时测试任务..." && sleep 3600' // 模拟1小时任务
      }
    }
    stage('B') {
      steps {
        script {
          while (true) {
            // 获取Stage A的当前状态
            def stageAStatus = currentBuild.getStageResults().find { it.name == 'A' }?.status
            // 当Stage A进入完成状态(成功/失败/中止)时停止循环
            if (stageAStatus in ['SUCCESS', 'FAILURE', 'ABORTED']) {
              echo "Stage A已完成,状态:${stageAStatus},停止Stage B循环"
              break
            }
            // 执行压缩并推送最新报告的操作
            echo "开始压缩推送最新测试报告..."
            sh 'tar -czf latest_report.tar.gz ./test_reports && scp latest_report.tar.gz user@remote:/target/path' // 替换为实际命令
            // 等待1分钟后再次执行
            sleep time: 1, unit: 'MINUTES'
          }
        }
      }
    }
  }
}

方案二:通过共享变量标记完成状态

如果担心getStageResults的版本兼容性,可以用全局变量标记Stage A的完成状态:

// 定义全局变量标记Stage A是否完成
def stageAFinished = false

stage("Run A and Run B") {
  parallel {
    stage('A') {
      steps {
        try {
          // 替换为你的耗时测试任务
          sh 'echo "执行耗时测试任务..." && sleep 3600'
        } finally {
          script {
            // 无论任务成功/失败/中止,都标记为完成
            stageAFinished = true
          }
        }
      }
    }
    stage('B') {
      steps {
        script {
          while (!stageAFinished) {
            // 执行压缩推送操作
            echo "开始压缩推送最新测试报告..."
            sh 'tar -czf latest_report.tar.gz ./test_reports && scp latest_report.tar.gz user@remote:/target/path' // 替换为实际命令
            // 等待1分钟
            sleep time: 1, unit: 'MINUTES'
          }
          echo "Stage A已完成,停止Stage B循环"
        }
      }
    }
  }
}

注意事项

  • 确保Jenkins运行节点有足够资源同时承载两个并行阶段的执行
  • 若测试报告是逐步生成的,需保证每次Stage B执行时能读取到最新的报告文件
  • sleep的时间单位支持SECONDS/MINUTES/HOURS,可根据需求调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:01:15