Jenkins中使用不同参数的同一cronjob的多个作业

szqfcxe2  于 2022-11-21  发布在  Jenkins
关注(0)|答案(1)|浏览(166)

我们正在使用第三方服务来创建和使用代金券。已经有8万多张代金券被制作出来了。我们的cronjobs会同步检查每张代金券的状态(已使用/未使用),并在我们的服务器数据库中更新它。完成一遍需要2个小时,然后从第一张代金券继续到下一遍。
限制条件:

  • 第三方支持每秒6次查询(QPS)。
  • 我们只有一个Jenkins主服务器,没有代理节点。

使用一台Jenkins服务器,我们能否缩短执行时间?
我们是否可以在Jenkins主服务器上为同一个cronjob设置多个并行执行的作业?比如前50 k条记录由其中一个作业处理,其余的由另一个作业处理。

gcmastyq

gcmastyq1#

如果您有空间垂直扩展虚拟机,以防遇到资源问题(CPU、内存)瓶颈,您应该能够达到性能。IMV最佳选择是在管道中使用并行阶段。如果您事先知道批处理大小,则可以对每个阶段中的大小进行硬编码。如果您希望添加一些逻辑来确定拥有多少记录,然后根据这些记录分配记录,您可以创建一个具有动态阶段的管道,如下所示。

pipeline {
    agent any

    stages {
        stage('Parallel') {
            steps {
                script {
                    parallel parallelJobs()
                }
            }
        }
    }
}

def getBatches() {
  // Have some logic to allocate batches
  return ["1-20000", "20000-30000", "30000-50000"]
}

def parallelJobs() {
  jobs = [:]

  for (batch in getBatches()) {
    jobs[batch] = { stage(batch) {
       echo "Processing Batch $batch"
     }
    }
  }
  return jobs
}

相关问题