2

我的软件目前有 6 个模块,它们经历了几个阶段:编译、单元测试、集成测试、声纳分析、war 文件创建。为了提高性能并限制并发线程,我将这些阶段放在我的类Step的实例中,它包含关于它的依赖项以及是否完成的最少信息。

为了运行确切数量的线程,我创建了工作人员,这些工作人员会拉新工作,直到一切都完成。

def parallelWorkers = [:]
Data.maxConcurrentBuilds.times {
  parallelWorkers["Worker#${it}"] = {
    Step work = getWork()
    if (work == null) {
      echo "Could not get initial work"
      return null
    }

    waitUntil {
      stage(work.name) {
        work.run()
      }
      work = getWork()
      return work == null
    }
    echo "No remaining work. Shutting down worker ${it}"
  }
}
try {
  stage('Parallel workers for module building') {
    gitlabCommitStatus('modules') {
      parallel parallelWorkers
    }
  }
} catch (e) {
  throw e
}

但问题是,这些步骤未显示在 BlueOcean UI 中。 海景

现在我想知道是否有办法动态重命名这些阶段?从我读过的内容来看,BlueOcean 不支持这种嵌套,所以我的想法是更改它正在运行的工作人员的舞台名称。

4

1 回答 1

1

您必须使用“${}”来调用名称,我已经这样做了很多次并且效果很好:

String test = 'my_stage_name'
stage("${test}") {
}

我不知道“${work.name}”是否有效,如果没有,您可以使用中间字符串来存储 work.name 值,然后使用“${}”调用他。

更新:

这对我有用:

def workerNames = ['one','two','three']
def builds = [:]

workerNames.each {

    builds[it] = {

        stage("Worker#${it}") {
            println(it)    
        }
    }   
}

stage ('test') {

    parallel builds
}

结果:

在此处输入图像描述

在此处输入图像描述

于 2017-12-12T09:46:16.010 回答