2017-05-15 2 views
4

나는 2 주 동안 전체 인터넷을 검색했고, freenode IRC와 Jenkins 사용자 그룹 메일 링리스트에서 질문을 받았다. 그러나 대답이 없으므로 여기있다. 나는 너에게 나의 마지막 희망이다.젠킨스 파이프 라인과 엄청난 양의 병렬 단계

수백 개의 병렬 브랜치를 생성하는 Jenkins 스크립트 파이프 라인이 수백 개의 슬레이브 노드에서 동시에 실행되어야합니다. 지금은 Jenkins BlueOcean 사용자 인터페이스처럼 보이지 않습니다. 모든 단계가 표시 될 수 없다는 점에 도달했습니다.

우리는 우리의 필요성을 이해할 수 있도록 배경을 제공해야합니다. 우리는 수천 개의 Behat/Selenium을 보유한 거대한 프로젝트를 가지고 있으며, 순차적으로 실행하면 30 시간 이상 걸립니다. 우리는 Jenkins에서 소스 코드를 다운로드하고 유물을 Jenkins로 다시 업로드하여 테스트를 실행하는 모든 테스트 및 소비자를 저장하기 위해 대기열 시스템 (RabbitMq)을 사용 했었지만 몇 번 전에 기본 솔루션을 구현했습니다. 젠킨스 원주민은 노예이며 충분한 유지 관리가 불가능합니다 (예 : 실시간 출력 로그 및 사용 통계의 혜택을받지 못합니다).

여기에 문제를 설명하는 공개 문제가 있다는 것을 알고 있습니다. https://issues.jenkins-ci.org/browse/JENKINS-41205하지만 기본적으로 다음 주에는 해결 방법이 필요합니다. 우리 deelopment 팀은이 새로운 파이프 라인을 오랫동안 기다리고 있습니다. (이것은 복잡해 보이는 수 있지만, 기본적으로, 진짜 문제는 "기능 테스트"입니다 https://github.com/willy-ahva/pim-community-dev/blob/086e4ed48ef1a3d880ca16b6f5572f350d26eb03/Jenkinsfile을 :

Build --- Unit Tests --- Integration Tests --- Functional Tests --- 
       |    |     | 
       tool A   suite A  matrix-A-A-batch 0 
       tool B   suite B  matrix-A-A-batch 1 
       tool C       matrix-A-A-batch 2 
               matrix-A-A-batch 3 
                .... 
               "Unable to display more" 

당신은 여기에 우리의 Jenkinsfile의 전체 버전을 찾을 수 있습니다

우리 pippeline 순간에 그렇게 보이는 단계)

내 질문은 :

  1. 것은 내가 좋은 방법을 평행하게 사용하고 있는가?
  2. Jenkins/BlueOcean 문제 일 뿐이며 링크 된 문제에 기여해야합니까? (그렇다면, 어떻게 Java Dev가 아닙니다.)
  3. MultiJob을 사용하고 단계 대신 작업을 병렬화해야합니까?
  4. 사용할 수있는 병렬을 제외하고 다른 도구가 있습니까? (어떤 종류의 포크 등)?

도움 주셔서 감사합니다. Jenkins가 Pipeline 및 BlueOcean UI를 사용하게 된 것을 좋아하며 팀에서 실제로 사용하기를 원합니다.

+0

스펜서 말론 (Spencer Malone)이 다투면서 우리는 이러한 종류의 병렬 처리를 위해 대기열 시스템을 유지했습니다. 우리는 빌드를 약간 변경하여 규모를 조정하는 것이 더 쉽습니다 (마스터와 소비자 사이의 많은 관계를 하나씩 제거하여 병목 현상을 일으키지 않음). –

답변

1
  1. 이것은 아마도 병렬 작업을 수행하기에 좋지 않은 방법 일 것입니다. 대신 각 병렬 맵 엔트리를 작업자로 취급하고 테스트를 대기열/스택/데이터 구조에 넣습니다. 각 작업자 스레드는 필요에 따라 대기열에서 튕겨 나올 수 있습니다. 그러면 대기중인 100 만 건의 작업으로 거기에 앉지 않습니다. 테스트가 실패했음을 분명히 알 수 있도록 로깅을 신중하게해야하지만 너무 힘들어서는 안됩니다.
  2. 다른 UI 디자인 문제만큼이나 수정하기 쉬운 것은 아닙니다. 나는 당신이 그것을 찌르 게 줄 것을 권할 것이다! 누가 해결책을 알 수 있습니까?
  3. 아마도 그렇지 않습니다. 내 의견으로는 이것은이 muddier을 만든다
  4. 병렬은 포크를위한 당신의 선택이다.

이 작업을 계속하고 싶지만 UI가 이상하게 들리는 것을 원치 않으면 각 테스트를 스테이지로 정의하는 것을 중지 할 수 있습니다. 실패 할 때 실패한 것이 무엇인지 명확하지 않지만 UI는 더 행복해야합니다.

+0

"대신 각 병렬 맵 엔트리를 작업자로 취급하고 테스트를 대기열/스택/데이터 구조에 넣을 것입니다." 당신은 더 구체적 일 수 있습니까? 이미 저도 해 봤지만 개발 팀이 Jenkinsfile의 나머지 부분처럼 파이프 라인을 변경할 수 있기를 정말로 바랍니다. –

관련 문제