워크플로 취소 참조(Workflow cancellation reference)

워크플로 취소 참조(Workflow cancellation reference)

워크플로 실행을 취소할 때 GitHub가 수행하는 단계에 대한 정보를 알려드릴게요. 취소 동작을 이해하면 워크플로와 관련된 리소스를 잘 정리할 수 있어요.

출처: 문서

본문

워크플로 실행을 취소할 때 GitHub가 수행하는 단계에 대한 정보를 확인할 수 있습니다.

워크플로 실행을 취소할 때 워크플로 실행과 관련된 리소스를 사용하는 다른 소프트웨어를 실행 중일 수 있습니다. 워크플로 실행과 관련된 리소스를 확보하는 데 도움이 되도록 GitHub가 워크플로 실행을 취소하기 위해 수행하는 단계를 이해하는 것이 좋습니다.

  1. 워크플로 실행을 취소하기 위해 서버는 현재 실행 중인 모든 잡의 if 조건을 다시 평가합니다. 조건이 true로 평가되면 잡은 취소되지 않습니다. 예를 들어 if: always() 조건은 true로 평가되므로 잡은 계속 실행됩니다. 조건이 없으면 if: success() 조건과 동일하며, 이전 스텝이 성공적으로 끝났을 때만 실행됩니다.

  2. 취소해야 하는 잡의 경우 서버는 취소해야 하는 잡이 있는 모든 러너 머신에 취소 메시지를 보냅니다.

  3. 계속 실행되는 잡의 경우 서버는 완료되지 않은 스텝의 if 조건을 다시 평가합니다. 조건이 true로 평가되면 스텝은 계속 실행됩니다. cancelled 표현식을 사용해서 cancelled() 상태 검사를 적용할 수 있습니다. 자세한 내용은 Evaluate expressions in workflows and actions을 참고하세요.

  4. 취소해야 하는 스텝의 경우 러너 머신은 스텝의 진입 프로세스(JavaScript 액션은 node, 컨테이너 액션은 docker, 스텝에서 run을 사용할 때는 bash/cmd/pwd)에 SIGINT/Ctrl-C를 보냅니다. 프로세스가 7500ms 내에 종료되지 않으면 러너는 프로세스에 SIGTERM/Ctrl-Break를 보내고 프로세스가 종료되기를 2500ms 기다립니다. 프로세스가 여전히 실행 중이면 러너는 프로세스 트리를 강제 종료합니다.

  5. 5분의 취소 타임아웃 기간이 지난 후 서버는 취소 대상으로 표시된 잡과 스텝 중 여전히 실행 중인 것을 모두 강제로 종료합니다.

더 알아보기 (Learn more)