Github Actions - Timeout
Timeout
특정 시간 이상 실행되면 job / step을 자동으로 중단시키는 안전장치로 아무 설정이 없으면 360분(6시간)에 워크플로우(정확하게는 job이)가 강제로 종료된다.
사용하는 이유는 아래와 같다
- 무한대기/행(hang) 방지 :외부 서비스 지연, 네트워크 이슈, 데드락 등으로 run이 무한으로 돌아가는 상황을 차단한다
- 비용 / 러너 자원 보호 : 불필요한 시간소요와 러너 점유로 큐가 막히는 문제를 예방한다
- 피드백 가속 : 빨리 실패하게하여 문제를 조기에 감지 및 리턴한다.
이 타임 아웃은 Job 단위로 사용하는데 필요시에는 Step 단위로 상세하게 적용하기도 한다.
Job 단위 Timeout
먼저 job 단위로 timeout을 거는 방법에 대해서 살펴보자.
파일을 하나 생성해주고
name을 생성해주고 이벤트도 간단하게 push로 잡아주자.
이제 job을 생성하는데 특정 job의 하위에 timeout-minutes로 분단위로 timeout을 지정한다.
그리고 테스트를 위해서 run에 sleep을 걸어서 90초 동안 아무것도 안하고 대기하도록 만들어주자.
이러고 commit & push 해주자.
github를 보면
대기가 39초동안 걸리고 있는 모습을 볼 수 있고
보면 1분 12초 가량에서 job이 cancel 되는 것을 알 수 있다.
만약 job의 timeout을 2로 변경하고 sleep을 150초를 걸고 push 해보면
2분 동안 run하다가
2분이 지나면 Cancel 된다.
Step 단위 Timeout
step단위로 timeout 다는것도 방식은 동일하다
다만 timeout-minutes의 위치만 step의 하위로 연결해주면 된다.
파일을 하나 생성해주고
파일을 만드는데 여기서 timeout만 step의 하위로 달아주자.
이러고 commit & push 해주고
github에서 확인하면
1분을 넘기고 난 후에 timeout으로 종료시키는 것을 볼 수 있다.