0

내 소프트웨어에는 컴파일, 유닛 테스트, 통합 테스트, 음파 분석, 전쟁 파일 생성과 같은 여러 단계로 실행되는 모듈이 현재 6 개 있습니다. 성능을 향상시키고 동시 스레드를 제한하기 위해 클래스의 인스턴스에 해당 단계를 넣습니다. 단계는 종속성에 대한 최소한의 정보를 보유하고 완료된 경우 수행합니다.Jenkinsfile에서 실행 중에 스테이지의 이름을 동적으로 바꿀 수 있습니까?

정확한 스레드 수를 실행하려면 모든 작업이 완료 될 때까지 새로운 작업을 수행하는 작업자를 생성해야했습니다.

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

"$ {}"을 (를) 사용하여 이름을 호출해야합니다. 이에게 시간을 많이 수행하고 완벽하게 작동합니다

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

+0

내가 이름의 목록을 만들었습니다. 그게 작동하는지 확인하겠습니다. 하지만 우리 Jenkins 대기열은 조금 붐비고 ... 몇 분 정도 기다려야합니다. 나는 이것이 정말로 잘되기를 바란다. – Ctwx

+0

귀하의 증명 결과를 알려주십시오;) –

+0

작동하지 않습니다. 이것은 내 접근 방식입니다 : https://pastebin.com/SFFqpga6 – Ctwx