有没有办法在 运行 时动态重命名 Jenkinsfile 中的阶段?

Is there a way to dynamically rename a stage in a Jenkinsfile while running?

我的软件ware 目前有 6 个模块,它们 运行 通过几个阶段:编译、单元测试、集成测试、sonarqube 分析、war 文件创建。 为了提高性能并限制并发线程,我将这些阶段放在我的 class 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 不支持这种嵌套,所以我的想法是只更改 运行ning 中的工作人员的舞台名称。

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

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
}

结果: