[Jenkins] 성공할 때 까지 잡 반복시키기 - quiet period(delay)와 함께

by 스뎅(thDeng) on

문제

동일한 Jenkins job을 성공할 때 까지 반복시키고 싶다.

예를 들어, 다른 작업의 종료여부를 모니터링하는 job이 있는데, 특정 시간부터 다른 작업이 종료됐는지 5분 마다 한번씩 체크하고 종료하지 못 했다면 slack 등으로 메시지를 보낸다. 그리고 그 작업이 종료되면 이 모니터링 job도 함께 종료한다. 5분 마다 종료 됐는지 체크하는 메시지를 받을 수 있는 것이다.

해결방법

위의 문제는 간단한 Jenkins job 설정만으로 가능하다.

반복 사이의 delay (quiet period)

job을 실행시킬 때 바로 실행시키지 않고, 일정 시간의 delay를 주고 싶다면 Quiet Period를 쓰면 된다. 다른 글(Quiet Period 설정)에서 정리한 것처럼 job에 quiet period를 설정해 주면 된다.

job 설정에서 General 영역에 있는 고급 (Advanced)...를 클릭하면 숨겨진 설정이 나온다.

Config quiet period to specific jobs 1

여기에 Quiet period를 초 단위로 설정해 주면 된다.

Config quiet period to specific jobs 2

quiet period가 설정된 job을 실행하면 설정한 시간 동안 대기 (pending) 상태로 빠져서 job 실행이 대기하게 된다.

Pending job in quiet period

동일한 job을 반복시키기

job 설정에서 빌드 후 조치Trigger parameterized build on other projects를 추가해서 다른 job을 실행시키면 된다. 여기서는 job을 계속 반복시킬 것이기 때문에 Projects to build로 job 이름을 그대로 적어주면 된다. job에 다른 전달인자를 바꾸고 싶다면 아래의 ADD PARAMETERS를 설정해 주면 된다.

Config trigger other project

job 이름을 변경해도 자동으로 따라 바뀌니 걱정하지 않아도 된다.

특정 조건으로 job 반복 멈추기

Trigger parameterized build on other projects 설정으로 다른 job을 실행시킬 때 현재 build의 상태를 체크할 수 있다. 이 글의 맨 위에서 설명한 예시처럼 모니터링할 다른 작업이 종료되지 못 한 상태는 Jenkins job의 unstable 상태로 정의하고, 정상적으로 종료된 경우를 stable로 정의할 수도 있다.

정리를 하면, job이 정상상태(stable)로 돌아올 때 까지 job을 반복해서 실행시키는 것이다.

Config trigger other project

위처럼 Trigger when build isunstable이거나 fail인 경우만 실행시키도록 설정한다. 모니터링이 끝나고 job이 stable 상태로 돌아오면 반복이 끝나게 된다.

정리

아래 스냅샷의 build #10과 #11은 unstable 상태로 계속 반복되어 실행된 상태이고, #12가 실행을 대기 중이다.

Pending job in quiet period

build #12가 정상적으로 실행이 끝나서 stable 상태가 되면 더 이상 job이 반복되지 않는다.

Finished repeating job

참고

별도로 명시하지 않을 경우, 이 블로그의 포스트는 다음 라이선스에 따라 사용할 수 있습니다: Creative Commons License CC Attribution-NonCommercial-ShareAlike 4.0 International License