Jenkins를 올바르게 확장하는 방법은 무엇입니까?


27

내 프로젝트에는 Jenkins Master + 1 Jenkins 슬레이브 (2 executors)를 실행하는 하나의 AWS 서버가 있습니다. 더 많은 것이 필요합니다
빌드 성능을 높이 려면 세 가지 옵션이 있습니다.

  1. 확장 : AWS 인스턴스를 더 크게 만들고 실행기를 더 추가합니다.
  2. 확장 : AWS 인스턴스를 더 크게 만들고 다른 jenkins 슬레이브 프로세스를 추가하십시오.
  3. 스케일 아웃 : jenkins 슬레이브로 다른 AWS 인스턴스를 생성하고 마스터에 연결

우리는 큰 조직에 있고 현재 Jenkins Master가 필요한 모든 장소에 이미 액세스하고 있기 때문에 2.하고 싶습니다. 옵션 3. "새 서버"는 몇 주가 걸리는보다 관료적 인 승인이 필요하므로 복잡합니다.

그래서 내 질문은 :

  • 옵션 2에 기술적 인 문제가 있습니까? . 아마도 각 젠킨스 노예의 집행자는 다른 노예 집행자를 알지 못합니까?
  • 일반적으로 Jenkins를 확장하는 가장 좋은 방법은 무엇입니까? 스케일 업 또는 스케일 아웃?

새로운 하드웨어에서 볼륨을 백업 및 복원해야하므로 다른 하드웨어 유형으로 이동하면 인스턴스 유형을 변경하는 것이 문제가 될 수 있습니다.
Tensibai

2
왜 3 번이 아닙니까? Jenkins에 작업을 보내는 일반적인 방법은 마스터하는 것입니다. 그리고 특정 기준에 따라 마스터는 적절한 노예에게 완벽하게 보낼 것입니다
Romeo Ninov

FWIW, 빌드 구조를 분석하여 빌드 머신의 리소스를 사용하는 방법을 확인해야합니다. 스케일 업 도움 되지 않을 수 있습니다 . 동일한 머신에서 2 개의 병렬 빌드에 대한 빌드 시간이 합쳐진 빌드 시간보다 긴 경우가 발생했습니다. 동일한 두 빌드가 겹치지 않고 순차적으로 실행됩니다. 이 경우 # 3은 실제로 사용할 수있는 유일한 실용적인 옵션입니다.
Dan Cornilescu

나는 # 3가 더 낫다는 것에 동의하지만 나는 그것에 대한 논쟁이나 # 1과 # 2에 대한 논쟁이 없다 ...
Oscar Foley

당신이 당신의 환경 내에서 기회가 있다면, 나는 일시적인 해결책을 찾을 것입니다. 이미 AWS에 있다는 것을 알면 워크로드를 처리하는 동안 필요에 따라 머신을 쉽게 올리고 내릴 수 있습니다. wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
vega

답변:


11

동일한 머신에서 여러 젠킨스 슬레이브를 실행하는 데 근본적인 기술적 문제 는 없습니다 . 실제로 동일한 컴퓨터에서 여러 슬레이브를 실행하면 여러 가지 이유가 있습니다.

실행 프로그램을 올바르게 사용하면 동일한 머신에서 여러 슬레이브 인스턴스가 필요하지 않지만 다음과 같은 고유 한 사용 사례가 있습니다.

  • 구성된 노드간에 더 많은 구성 기능을 원합니다. 한 노드를 가능한 많이 사용하도록 설정하고 다른 노드를 필요할 때만 사용한다고 가정합니다.
  • 여러 가지를 구축하는 Jenkins 마스터 설치가 여러 개있을 수 있으므로이 구성을 사용하면 동일한 상자에 둘 이상의 마스터에 대한 슬레이브를 가질 수 있습니다. Jenkins를 사용하면 실제로 두 명의 주인을 섬길 수 있습니다.
  • Libvirt Slaves Plugin 같은 Jenkins 플러그인과 함께 가상 머신의 시작 / 중지 / 바꾸기 용이성을 활용할 수 있습니다 .
  • 운영 비용 (예 : 유휴 슬레이브를 실행하기위한 유틸리티 비용)을 최소화하면서 동시에 하드웨어 투자 및 활용도를 극대화하고자합니다.

일반적으로 수평 확장 기능은 일반적으로 사용 가능한 물리적 리소스의 유형 / 크기에 의해 제한되기 때문에 수평 확장이 선호됩니다.

특히 빌드 성능을 향상시키기 위해 실제 빌드를 분석 하여 머신 리소스를 사용하는 방법, 병목 현상이있는 위치 및 스케일링이 도움이되는지 여부를 확인하기 위해 확장 성 제한을 결정하는 것이 좋습니다 .

예를 들어, 동일한 머신에서 2 개의 병렬 빌드에 대한 빌드 시간이 동일한 머신에서 순차적으로 실행되는 (중첩되지 않은) 동일한 2 개의 빌드의 결합 된 빌드 시간보다 긴 경우가 발생했습니다. 이 경우 실제로 전체 건물 용량을 이므로 확장을 고려하지도 않습니다 .



3

나는 당신이 둘 다해서는 안된다고 생각합니다.)

글쎄요 더 많은 집행자가 필요하다고 생각합니다. 어쩌면 빌드가 실제로 자원 집약적입니까? 최소한 4를 실행하지만 작업에 따라 6 ~ 8을 실행합니다. 나는 코어 수를 exectors와 일치시키는 것을 좋아합니다. 따라서 노드를 확장하고 싶을 수도 있습니다. 4-8 실행자를 위해 M4를 크게 실행하는 것 같습니다.

또한 스케일 아웃을해야한다고 생각하지만 현명하게해야합니다. Jenkins에는 빌드 대기열의 내용에 따라 AWS 에서 자동으로 스케일 아웃 하는 플러그인이 있습니다. 기본적으로 슬레이브와 대기하기 전에 얼마나 많은 작업과 대기 시간을 알려주고 새 슬레이브로 작업을 보냅니다. 최대 슬레이브 수, 최소 수량 등을 설정할 수도 있습니다.


2

옵션 3으로 넘어 가면서 스케일 업 대신 스케일 아웃을 수행했습니다. 모든 Jenkins 에이전트가 자동 스케일링 그룹이있는 ECS (사용자 정의 Docker 기반 Jenkins)에서 실행되도록 설정했습니다. 모든 Jenkins 마스터가 ECS와 통신하므로 ECS의 워크로드를 공유하므로 스케일 업 연습에서 Jenkins 마스터를 다시 만들 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.