작업 전후에 스크립트 실행하기
작업 전후에 스크립트 실행하기
자체 호스팅 러너에서 작업 바로 전이나 후에 스크립트를 자동으로 실행할 수 있어요. 러너 환경을 빌드하거나 정리하거나, 디렉토리를 비우거나, 러너 사용 텔레메트리를 추적하는 데 사용할 수 있어요.
출처: 문서
본문
사전 및 사후 작업 스크립트 정보
작업이 실행되기 전이나 작업 실행이 끝난 후에 자체 호스팅 러너에서 스크립트를 자동으로 실행할 수 있어요. 이 스크립트를 사용해 러너 환경을 빌드하거나 정리하거나, 디렉토리를 비우는 등 작업의 요구 사항을 지원할 수 있어요. 또한 러너가 어떻게 사용되는지에 대한 텔레메트리를 추적하는 데도 사용할 수 있어요.
커스텀 스크립트는 러너에 특정 환경 변수가 설정되면 자동으로 트리거되며, 환경 변수는 스크립트의 절대 경로를 담아야 해요. 자세한 내용은 아래 스크립트 트리거하기를 참고하세요.
다음 스크립팅 언어가 지원돼요:
- Bash:
bash를 사용하고sh로 폴백할 수 있어요.-e {pathtofile}을 실행해 실행돼요. - PowerShell:
pwsh를 사용하고powershell로 폴백할 수 있어요.-command ". '{pathtofile}'"을 실행해 실행돼요.
스크립트 작성하기
커스텀 스크립트는 다음 기능을 사용할 수 있어요:
- 변수: 스크립트는 기본 변수에 접근할 수 있어요. 전체 웹훅 이벤트 페이로드는
GITHUB_EVENT_PATH에서 찾을 수 있어요. 자세한 내용은 변수 참조를 참고하세요. - 워크플로 명령: 스크립트는 워크플로 명령을 사용할 수 있어요. 자세한 내용은 GitHub Actions용 워크플로 명령을 참고하세요. 스크립트는 환경 파일도 사용할 수 있어요. 자세한 내용은 환경 파일을 참고하세요.
스크립트 파일은 성공적으로 실행되려면 관련 언어의 파일 확장자(.sh 또는 .ps1 등)를 사용해야 해요.
Note
저장소에 대한 읽기 접근이 있는 사람은 UI 로그에서 출력을 볼 수 있으므로, 스크립트를 사용해 콘솔에 민감한 정보를 출력하지 마세요.
종료 코드 처리하기
사전 작업 스크립트의 경우 종료 코드 0은 스크립트가 성공적으로 완료되었음을 나타내며, 작업이 계속 실행돼요. 다른 종료 코드가 있으면 작업이 실행되지 않고 실패로 표시돼요. 사전 작업 스크립트의 결과를 보려면 Set up runner 항목의 로그를 확인하세요. 로그 확인에 대한 자세한 내용은 워크플로 실행 로그 사용하기를 참고하세요.
continue-on-error 설정은 이 스크립트에서 사용하도록 지원되지 않아요.
스크립트 트리거하기
커스텀 스크립트는 러너에 있어야 하지만, actions-runner 애플리케이션 디렉토리에 저장해서는 안 돼요. 스크립트는 러너 서비스를 실행하는 서비스 계정의 보안 컨텍스트에서 실행돼요.
Note
트리거된 스크립트는 동기적으로 처리되므로, 실행되는 동안 작업 실행을 차단해요.
러너가 스크립트의 절대 경로를 담은 다음 환경 변수를 가질 때 스크립트가 자동으로 실행돼요:
ACTIONS_RUNNER_HOOK_JOB_STARTED: 이 환경 변수에 정의된 스크립트는 작업이 러너에 할당되었지만 작업이 실행되기 전에 트리거돼요.ACTIONS_RUNNER_HOOK_JOB_COMPLETED: 이 환경 변수에 정의된 스크립트는 워크플로에 정의된 모든 단계가 실행된 후, 작업이 끝날 때 트리거돼요.
이 환경 변수를 설정하려면 운영 체제에 추가하거나, 자체 호스팅 러너 애플리케이션 디렉토리(러너 소프트웨어를 다운로드해 압축을 푼 디렉토리) 내의 .env라는 파일에 추가할 수 있어요. .env 파일을 변경하면 러너를 다시 시작해야 한다는 점에 유의하세요.
예를 들어 다음 .env 항목은 각 작업이 실행되기 전에 러너 머신에 /opt/runner/cleanup_script.sh로 저장된 스크립트를 자동으로 실행하게 해요:
ACTIONS_RUNNER_HOOK_JOB_STARTED=/opt/runner/cleanup_script.sh
Note
ACTIONS_RUNNER_HOOK_JOB_COMPLETED에 정의된 스크립트는 작업이 끝날 때, 작업이 완료되기 전에 실행돼요. 따라서 자동 확장 구현의 일부로 러너 머신을 삭제하는 것처럼 러너를 중단시킬 수 있는 사용 사례에는 적합하지 않아요.
문제 해결
권한 거부(Permission denied)
스크립트를 실행하려 할 때 "permission denied" 오류가 발생하면 스크립트가 실행 가능한지 확인하세요. 예를 들어 Linux나 macOS의 터미널에서 다음 명령을 사용해 파일을 실행 가능하게 만들 수 있어요.
chmod +x PATH/TO/FILE
워크플로를 사용해 스크립트를 실행하는 방법은 워크플로에 스크립트 추가하기를 참고하세요.
타임아웃 설정 없음
현재 ACTIONS_RUNNER_HOOK_JOB_STARTED 또는 ACTIONS_RUNNER_HOOK_JOB_COMPLETED가 실행하는 스크립트에 대해 사용 가능한 타임아웃 설정이 없어요. 결과적으로 스크립트에 타임아웃 처리를 추가하는 것을 고려할 수 있어요.
워크플로 실행 로그 검토하기
스크립트가 실행되고 있는지 확인하려면 해당 작업의 로그를 검토할 수 있어요. 스크립트를 트리거하는 환경 변수에 따라 Set up runner 또는 Complete runner에 대한 별도 단계 내에 스크립트가 나열될 거예요. 로그 확인에 대한 자세한 내용은 워크플로 실행 로그 사용하기를 참고하세요.