본문 바로가기
DevOps/Jenkins

Jenkins Naginator 플러그인을 활용해서 Failover 구축하기

by 흑시바 2024. 10. 6.

Jenkins Naginator는 Jenkins의 플러그인 중 하나로, 빌드 실패 시 자동으로 재시도하는 기능을 제공한다. 이 플러그인은 주로 불안정한 환경에서 빌드 실패를 최소화하고, 일시적인 문제로 인한 빌드 실패를 자동으로 처리하는 데 유용하다.

주요 기능

Naginator 플러그인은 다음과 같은 주요 기능을 제공한다.

1. 자동 재시도 설정

빌드가 실패했을 때 자동으로 재시도할 수 있는 설정을 제공한다. 사용자는 재시도 횟수와 재시도 간격을 설정할 수 있다. 이를 통해 일시적인 네트워크 문제나 외부 서비스의 일시적인 장애로 인한 빌드 실패를 자동으로 극복할 수 있다.

2. 조건부 재시도

모든 빌드 실패에 대해 재시도하는 것이 아니라, 특정 조건에 맞는 경우에만 재시도하도록 설정할 수 있다. 예를 들어, 특정 오류 메시지가 로그에 포함된 경우에만 재시도하도록 설정할 수 있다.

3. 지연 시간 설정

재시도 간격을 설정하여, 빌드 실패 후 일정 시간 후에 재시도하도록 할 수 있다. 이는 시스템 자원을 효율적으로 사용하고, 연속적인 빌드 실패를 방지하는 데 도움이 된다.

4. 환경 변수 설정

재시도 시 특정 환경 변수를 설정할 수 있다. 이를 통해 재시도 빌드가 원래 빌드와 다른 환경에서 실행되도록 할 수 있다.

5. 고급 설정

Naginator 플러그인은 다양한 고급 설정을 제공하여, 사용자가 필요에 따라 재시도 동작을 세밀하게 조정할 수 있다. 예를 들어, 최대 재시도 횟수, 재시도 간격의 증가율 등을 설정할 수 있다.

설치 및 설정 방법

Naginator 플러그인을 설치하고 설정하는 방법은 다음과 같다.

1. 플러그인 설치

Jenkins 관리 페이지로 이동 - '플러그인 관리' 메뉴를 선택 - '설치 가능' 탭에서 'Naginator'를 검색하여 설치

2. 빌드 작업에 Naginator 설정 추가

Jenkins 대시보드에서 설정하려는 빌드 작업을 선택 - '구성' 메뉴 클릭 -  '빌드 후 조치' 섹션에서 'Add post-build action'을 클릭하고 'Retry build after failure'를 선택

 

3. 플러그인 옵션 설정

Jenkins Naginator 플러그인의 "Retry build after failure" 옵션들은 빌드 실패 시 재시도 동작을 세밀하게 조정할 수 있는 다양한 설정을 제공한다.

 

1. Rerun build for unstable builds as well as failures

 

이 옵션은 빌드가 실패하지 않고 불안정한 상태(unstable)로 끝난 경우에도 재시도하도록 설정하는 옵션이다. Jenkins에서 빌드가 불안정한 상태로 끝나는 경우는 주로 테스트 실패 등으로 인해 발생한다.


이 옵션을 활성화하면, 테스트 실패로 인해 빌드가 불안정한 상태로 끝난 경우에도 재시도한다. 예를 들어, 테스트 중 일부가 실패하여 빌드가 불안정한 상태로 끝났다면, 이 옵션이 활성화된 경우 빌드를 다시 시도하게 된다.

 

2. Delay before retrying build

 

이 옵션은 빌드 실패 후 재시도하기 전에 대기할 시간을 설정하는 옵션이다. 재시도 간격을 설정하여, 빌드 실패 후 일정 시간 후에 재시도하도록 할 수 있다.

 

값을 5분으로 설정하면, 빌드 실패 후 5분 후에 재시도한다. 이는 시스템 자원을 효율적으로 사용하고, 연속적인 빌드 실패를 방지하는 데 도움이 된다.

 

3. Maximum number of successive failed builds

 

이 옵션은 연속으로 실패한 빌드의 최대 횟수를 설정하는 옵션이다. 설정된 값을 초과하면 더 이상 재시도하지 않는다.

 

값을 5로 설정하면, 연속으로 5번 실패한 후에는 더 이상 재시도하지 않는다. 이는 무한 재시도로 인한 자원 낭비를 방지하는 데 유용하다.

 

4. Only rerun build if regular expression is found in output

 

이 옵션은 빌드 로그에서 특정 정규 표현식에 매칭되는 경우에만 재시도하도록 설정하는 옵션이다. 이를 통해 특정 오류 메시지가 로그에 포함된 경우에만 재시도할 수 있다.

 

.*ERROR.*라는 정규 표현식을 설정하면, 빌드 로그에 'ERROR'가 포함된 경우에만 재시도한다. 예를 들어, 네트워크 문제로 인해 'Connection timed out' 메시지가 로그에 포함된 경우에만 재시도하도록 설정할 수 있다.

사용 시나리오

Job이 실패했을 경우, 콘솔 로그에서 메시지를 확인한다. 다음 이미지와 같이 Build Step 중 Execute Windows batch command에서 실패하는 경우, 재시작하도록 해야 하는 생겼다고 가정해 본다. (일시적인 오류라고 판단)

 

 

해당 Job 설정에서 빌드 후 조치 부분에 다음 이미지와 같이 빌드 실패시 특정 메시지가 발생하는 경우, 30초 뒤에 자동으로 최대 5번까지 재시작하는 설정을 추가한다.

빌드를 실패시킨다.

30초 후에 다시 빌드가 자동으로 실행된다.

 

메시지에서 Naginator에 의해 시작되었다는 것을 확인 할 수 있다. 이러면 성공적으로 Naginator가 적용된 것이다.

 

Jenkins Naginator 플러그인은 빌드 실패 시 자동 재시도를 통해 CI/CD 파이프라인의 안정성을 높이는 데 매우 유용한 도구이다. 다양한 설정 옵션을 통해 사용자의 필요에 맞게 재시도 동작을 조정할 수 있으며, 이를 통해 일시적인 문제로 인한 빌드 실패를 효과적으로 관리할 수 있다. Naginator 플러그인을 사용하면 개발자와 운영팀의 부담을 줄이고, CI/CD 파이프라인의 효율성을 높이는 데 큰 도움이 된다.

REFERENCE

https://plugins.jenkins.io/naginator/

https://medium.com/@harshan.dll/jenkins-automatically-rescheduling-failed-builds-with-naginator-plugin-cb4d3b273692

댓글