Jenkins 부하 분산을 위한 Slave 노드 추가 - woowacourse-teams/2021-drop-the-code GitHub Wiki

Jenkins Worker Node

image

적용 배경

Jenkins EC2에서 하고 있던 Job List

image

  • Backend 개발 서버 배포
  • Backend 운영 서버 배포
  • Backend Pull Request 빌드 및 테스트
  • Frontend 테스트
  • Frontend 배포

문제

image

  • 여러 Jenkins Job들이 동시에 실행되면서 Jenkins 인스턴스가 터지는 상황이 자주 발생
  • 동시에 Job을 하나만 실행하도록 제한하면 효율성이 떨어짐

목표

  • 부하가 많이 발생하는 Job들을 따로 Slave에서 실행시키도록 구성
  • Master 노드는 동시에 실행할 수 있는 Job의 개수를 1개로 고정
  • 각 job의 timeout을 10분으로 지정

구성

Slave 노드 구성

  • Slave Node를 위한 새로운 EC2 인스턴스 생성
  • Java 설치

Jenkins 설정 추가

  • ssh credential 추가
  • Slave 노드 등록
  • Slave 정보 등록

Job의 Label 등록

  • 각 Job마다 Label을 등록하여 Label에 맞는 Slave를 사용하도록 설정

Jenkins Master 동시에 실행할 수 있는 Job 개수 지정하기

  • Master Node의 Executor Number를 1개로 지정

Jenkins 모든 Job에 timeout 지정

  • Backend 빌드의 경우 정상적으로 빌드 진행 시간이 평균적으로 2분
  • Gralde 초기화 작업이 필요한 경우 평균적으로 5~6분
  • 빌드 10분이 넘는 경우에는 테스트의 최적화가 필요하다는 의미로 timeout 10분 지정

Job의 timeout 10분 지정

1

동시에 3개의 Job 실행

image

  • 3개의 job 모두 각각 다른 Node에서 실행