有没有办法在运行时动态重命名Jenkins文件中的一个阶段?

时间:2017-12-12 09:29:40

标签: multithreading jenkins jenkins-pipeline jenkins-blueocean

我的软件目前有6个模块,它们经历了几个阶段:编译,单元测试,集成测试,声纳分析,战争文件创建。 为了提高性能并限制并发线程,我将这些阶段放在我的类 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中没有显示这些步骤。 OceanView

现在我想知道是否有办法动态重命名这些阶段?据我所知,BlueOcean不支持这样的嵌套,所以我的想法就是改变它所运行的工作者的阶段名称。

1 个答案:

答案 0 :(得分: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
}

结果:

enter image description here

enter image description here