Skip to main content

워크플로 실행 로그 사용

워크플로 실행의 각 작업에 대한 로그를 보고, 검색하고, 다운로드할 수 있습니다.

워크플로 실행 페이지에서 워크플로 실행이 진행 중인지 아니면 완료되었는지 확인할 수 있습니다. 퍼블릭 리포지토리를 포함하여 워크플로 실행 정보를 보려면 GitHub 계정에 로그인해야 합니다. 자세한 내용은 "GitHub의 액세스 권한"을(를) 참조하세요.

실행이 완료되면 결과가 성공, 실패, 취소 또는 중립인지 확인할 수 있습니다. 실행이 실패한 경우 빌드 로그를 보고 검색하여 실패를 진단하고 워크플로를 다시 실행할 수 있습니다. 청구 가능한 작업 실행 시간(분)을 보거나 로그를 다운로드하고 아티팩트를 빌드할 수도 있습니다.

GitHub Actions는 Checks API를 사용하여 워크플로의 상태, 결과, 로그를 출력합니다. GitHub는 각 워크플로 실행에 대한 새 검사 도구 모음을 만듭니다. 확인 도구 모음에는 워크플로의 각 작업에 대한 검사 실행이 포함되며 각 작업에는 여러 단계가 포함됩니다. GitHub Actions는 워크플로의 한 단계로 실행됩니다. 확인 API에 대한 자세한 내용은 “검사에 대한 REST API 엔드포인트”을 참조하세요.

참고: 리포지토리에 유효한 워크플로 파일만 커밋해야 합니다. .github/workflows에 잘못된 워크플로 파일이 포함된 경우 GitHub Actions는 모든 새 커밋에 대해 실패한 워크플로 실행을 생성합니다.

로그 확인을 통한 실패 진단

워크플로 실행이 실패하는 경우 실패가 발생한 단계를 확인하고 실패한 단계의 빌드 로그를 검토하여 문제를 해결할 수 있습니다. 각 단계를 실행하는 데 걸린 시간을 확인할 수 있습니다. 로그 파일의 특정 줄에 permalink를 복사하여 팀과 공유할 수도 있습니다. 해당 단계를 수행하려면 리포지토리에 대한 읽기 권한이 필요합니다.

워크플로 파일에 구성된 단계 외에도 GitHub는 각 작업에 두 단계를 추가하여 작업 실행을 설정하고 완료합니다. 단계는 “작업 설정” 및 “작업 완료”라는 이름으로 워크플로 실행에 기록됩니다.

GitHub에서 호스트되는 실행기에서 실행되는 작업의 경우 “작업 설정”은 실행기의 이미지에 대한 세부 정보를 기록하고 실행기 컴퓨터에 있던 사전 설치된 도구 목록 링크를 포함합니다.

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 작업을 클릭합니다.

    "github/docs" 리포지토리의 탭 스크린샷. "작업" 탭은 주황색 윤곽선으로 강조 표시됩니다.

  3. 왼쪽 사이드바에서 확인할 워크플로를 클릭합니다.

    "작업" 탭의 왼쪽 사이드바 스크린샷. "CodeQL"이라는 워크플로가 진한 주황색 윤곽선으로 표시되어 있습니다.

  4. 워크플로 실행 목록에서 실행 이름을 클릭하여 워크플로 실행 요약을 확인합니다.

  5. 작업 또는 시각화 그래프에서 확인할 작업을 클릭합니다.

  6. 실패한 단계는 결과를 표시하도록 자동으로 확장됩니다.

  7. 필요에 따라 로그의 특정 줄에 대한 링크를 얻으려면 단계의 줄 번호를 클릭합니다. 그런 다음 웹 브라우저의 주소 표시줄에서 링크를 복사할 수 있습니다.

    작업의 로그를 보여주는 스크린샷. 실패한 단계 로그가 확장되고 줄 번호가 주황색 윤곽선으로 강조 표시됩니다.

로그 검색

특정 단계에 대한 빌드 로그를 검색할 수 있습니다. 로그를 검색하면 확장된 단계만 결과에 포함됩니다. 해당 단계를 수행하려면 리포지토리에 대한 읽기 권한이 필요합니다.

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 작업을 클릭합니다.

    "github/docs" 리포지토리의 탭 스크린샷. "작업" 탭은 주황색 윤곽선으로 강조 표시됩니다.

  3. 왼쪽 사이드바에서 확인할 워크플로를 클릭합니다.

    "작업" 탭의 왼쪽 사이드바 스크린샷. "CodeQL"이라는 워크플로가 진한 주황색 윤곽선으로 표시되어 있습니다.

  4. 워크플로 실행 목록에서 실행 이름을 클릭하여 워크플로 실행 요약을 확인합니다.

  5. 작업 또는 시각화 그래프에서 확인할 작업을 클릭합니다.

  6. 로그 출력의 오른쪽 상단의 검색 로그 검색 상자에 검색 쿼리를 입력합니다.

로그 다운로드

워크플로 실행에서 로그 파일을 다운로드할 수 있습니다. 워크플로의 아티팩트를 다운로드할 수도 있습니다. 자세한 내용은 "워크플로에서 데이터 저장 및 공유"을(를) 참조하세요. 해당 단계를 수행하려면 리포지토리에 대한 읽기 권한이 필요합니다.

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 작업을 클릭합니다.

    "github/docs" 리포지토리의 탭 스크린샷. "작업" 탭은 주황색 윤곽선으로 강조 표시됩니다.

  3. 왼쪽 사이드바에서 확인할 워크플로를 클릭합니다.

    "작업" 탭의 왼쪽 사이드바 스크린샷. "CodeQL"이라는 워크플로가 진한 주황색 윤곽선으로 표시되어 있습니다.

  4. 워크플로 실행 목록에서 실행 이름을 클릭하여 워크플로 실행 요약을 확인합니다.

  5. 작업 또는 시각화 그래프에서 확인할 작업을 클릭합니다.

  6. 로그의 오른쪽 위 모서리에서 드롭다운 메뉴를 선택한 다음 로그 보관 다운로드를 클릭합니다.

    작업의 로그 스크린샷입니다. 머리글에서 톱니바퀴 아이콘이 진한 주황색 윤곽선으로 표시됩니다.

참고: 부분적으로 다시 실행된 워크플로에 대한 로그 보관 계층을 다운로드하는 경우 보관 계층에는 다시 실행된 작업만 포함됩니다. 워크플로에서 실행된 작업에 대한 전체 로그 집합을 가져오려면 다른 작업을 실행한 이전 실행 시도에 대한 로그 보관 계층을 다운로드해야 합니다.

로그 삭제

GitHub 웹 인터페이스를 통해 또는 프로그래밍 방식으로 워크플로 실행에서 로그 파일을 삭제할 수 있습니다. 해당 단계를 수행하려면 리포지토리에 대한 쓰기 권한이 필요합니다.

GitHub 웹 인터페이스를 통해 로그 삭제

  1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.

  2. 리포지토리 이름 아래에서 작업을 클릭합니다.

    "github/docs" 리포지토리의 탭 스크린샷. "작업" 탭은 주황색 윤곽선으로 강조 표시됩니다.

  3. 왼쪽 사이드바에서 확인할 워크플로를 클릭합니다.

    "작업" 탭의 왼쪽 사이드바 스크린샷. "CodeQL"이라는 워크플로가 진한 주황색 윤곽선으로 표시되어 있습니다.

  4. 워크플로 실행 목록에서 실행 이름을 클릭하여 워크플로 실행 요약을 확인합니다.

  5. 오른쪽 위 모서리에서 드롭다운 메뉴를 선택한 다음 모든 로그 삭제를 클릭합니다.

    워크플로 실행 페이지의 스크린샷입니다. 오른쪽 위 모서리에는 케밥 아이콘으로 레이블이 지정된 버튼이 진한 주황색 윤곽선으로 표시됩니다.

  6. 확인 프롬프트를 검토합니다.

로그를 삭제하면 모든 로그 삭제 단추가 사라지며 워크플로 실행에 남아 있는 로그 파일이 없음을 나타냅니다.

프로그래밍 방식으로 로그 삭제

다음 스크립트를 사용하여 워크플로의 모든 로그를 자동으로 삭제할 수 있습니다. 여러 워크플로 실행에 대한 로그를 정리하는 유용한 방법이 될 수 있습니다.

예제 스크립트를 실행하려면:

  1. 코드 예제를 복사하여 delete-logs.sh라는 파일로 저장합니다.

  2. chmod +x delete-logs.sh으로 실행 권한을 부여합니다.

  3. 다음 명령을 실행합니다. 여기에서 REPOSITORY_NAME은 리포지토리의 이름이며 WORKFLOW_NAME은 워크플로의 파일 이름입니다.

    Shell
    ./delete-logs.sh REPOSITORY_NAME WORKFLOW_NAME
    

    예를 들어 .github/workflows/ci.yaml 워크플로에 대한 monalisa/octocat 리포지토리의 모든 로그를 삭제하려면 ./delete-logs.sh monalisa/octocat ci.yaml을 실행합니다.

예제 스크립트

Bash
#!/usr/bin/env bash

# Delete all logs for a given workflow
# Usage: delete-logs.sh <repository> <workflow-name>

set -oe pipefail

REPOSITORY=$1
WORKFLOW_NAME=$2

# Validate arguments
if [[ -z "$REPOSITORY" ]]; then
  echo "Repository is required"
  exit 1
fi

if [[ -z "$WORKFLOW_NAME" ]]; then
  echo "Workflow name is required"
  exit 1
fi

echo "Getting all completed runs for workflow $WORKFLOW_NAME in $REPOSITORY"

RUNS=$(
  gh api \
    -H "Accept: application/vnd.github+json" \
    -H "X-GitHub-Api-Version: 2022-11-28" \
    "/repos/$REPOSITORY/actions/workflows/$WORKFLOW_NAME/runs" \
    --paginate \
    --jq '.workflow_runs[] | select(.conclusion != "") | .id'
)

echo "Found $(echo "$RUNS" | wc -l) completed runs for workflow $WORKFLOW_NAME"

# Delete logs for each run
for RUN in $RUNS; do
  echo "Deleting logs for run $RUN"
  gh api \
    --silent \
    --method DELETE \
    -H "Accept: application/vnd.github+json" \
    -H "X-GitHub-Api-Version: 2022-11-28" \
    "/repos/$REPOSITORY/actions/runs/$RUN/logs" || echo "Failed to delete logs for run $RUN"

  # Sleep for 100ms to avoid rate limiting
  sleep 0.1
done

GitHub CLI를 사용하여 로그 보기

Dependabot alerts의 자세한 내용은 “GitHub CLI 정보”를 참조하세요.

특정 작업에 대한 로그를 보려면 run view 하위 명령을 사용합니다. run-id를 로그를 보려는 실행의 ID로 바꿉니다. GitHub CLI는 실행에서 작업을 선택할 수 있는 대화형 메뉴를 반환합니다. run-id를 지정하지 않으면 GitHub CLI에서 최근 실행을 선택할 수 있는 대화형 메뉴를 반환한 다음 실행에서 작업을 선택할 수 있는 다른 대화형 메뉴를 반환합니다.

gh run view RUN_ID --log

--job 플래그를 사용하여 작업 ID를 지정할 수도 있습니다. job-id를 로그를 보려는 작업의 ID로 바꿉니다.

gh run view --job JOB_ID --log

grep을 사용하여 로그를 검색할 수 있습니다. 예를 들어 이 명령은 error라는 단어를 포함하는 모든 로그 항목을 반환합니다.

gh run view --job JOB_ID --log | grep error

실패한 단계에 대한 로그를 필터링하려면 --log 대신에 --log-failed를 사용합니다.

gh run view --job JOB_ID --log-failed