현재 Jenkinsfile에 병렬로 실행되는 여러 빌드가 있습니다. 그러나 마스터 서버는 다소 과장되어 있습니다. 그래서 내 생각은 그것의 빌드를 구성된 값으로 제한하는 것입니다. concurrentbuild.젠킨스의 특정 번호로 병렬 빌드를 제한하십시오.
https://issues.jenkins-ci.org/browse/JENKINS-44085은 저에게 영감을주었습니다. 그러나 저는 계획에 조금 갇혀 있습니다.
def stepsForParallel = [:]
stage('read modules') {
readMavenPom().modules.findAll { module ->
module.endsWith('-service')
}.each { service ->
stepsForParallel[service] = transformIntoStep(service) // this returns { build module } to avoid immediate execution
}
}
stage('modules') {
parallel stepsForParallel
}
빌드 기능이 너무 병렬을 사용하지 : 지금과 같이 병렬로 실행되는지도에 모여 서비스 목록을 가지고있다. 그래서 저는 많은 병렬 작업을합니다.
제 아이디어는 병렬로 수행해야하는 모든 단계를 모으는 LinkedBlockingDeque (stepDeque)을 작성하는 것이 었습니다. 그런 다음 두 번째 모델 (workingDeque)을 구성하여 concurrentbuilds 크기로 만듭니다.
그러나 내 문제가 발생합니다. 내가 아는 한지도에서 평행하게 만 실행할 수 있습니다. 따라서 workingDeque의 작업 중 하나가 완료되면 나는 자유 스레드를 갖게됩니다.
내 질문은 : stepDeque에서 작업을 폴링하고 workingDeque에 추가 할 때 방금 추가 한 단계를 실행하는 방법이 있습니까? 아니면 이것을 달성하는 더 간단한 방법이 있습니까?