有没有办法在 运行 时动态重命名 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
}
结果:
我的软件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
}
结果: