跳至主要内容

使用工作流运行日志

您可以查看、搜索和下载工作流运行中每个作业的日志。

您可以从工作流运行页面查看工作流运行是否正在进行或已完成。您必须登录到 GitHub 帐户才能查看工作流运行信息,包括公共存储库的信息。有关详细信息,请参阅“GitHub 上的访问权限”。

如果运行已完成,您可以看到结果是成功、失败、已取消还是中性。如果运行失败,您可以查看和搜索构建日志以诊断故障并重新运行工作流。您还可以查看可计费的作业执行分钟数,或下载日志和构建工件。

GitHub Actions 使用 Checks API 输出工作流的状态、结果和日志。GitHub 为每个工作流运行创建一个新的检查套件。检查套件包含工作流中每个作业的检查运行,并且每个作业都包含步骤。GitHub Actions 作为工作流中的一个步骤运行。有关 Checks API 的更多信息,请参阅“检查的 REST API 端点”。

注意

确保您仅将有效的工作流文件提交到您的存储库。如果 .github/workflows 包含无效的工作流文件,则 GitHub Actions 会为每次新的提交生成一个失败的工作流运行。

查看日志以诊断故障

如果您的工作流运行失败,您可以查看哪个步骤导致了失败,并查看失败步骤的构建日志以进行故障排除。您可以查看每个步骤运行所需的时间。您还可以复制到日志文件中特定行的永久链接,以便与您的团队共享。执行这些步骤需要对存储库的读取访问权限。

除了工作流文件中配置的步骤外,GitHub 还会为每个作业添加两个额外的步骤来设置和完成作业的执行。这些步骤在工作流运行中记录,名称为“设置作业”和“完成作业”。

对于在 GitHub 托管的运行器上运行的作业,“设置作业”会记录运行器映像的详细信息,并包含指向运行器机器上预安装工具列表的链接。

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在您的存储库名称下,单击 操作.

    Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline.

  3. 在左侧边栏中,单击您要查看的工作流。

    Screenshot of the left sidebar of the "Actions" tab. A workflow, "CodeQL," is outlined in dark orange.

  4. 从工作流运行列表中,单击运行的名称以查看工作流运行摘要。

  5. 在“作业”下或可视化图中,单击您要查看的作业。

  6. 任何失败的步骤都会自动展开以显示结果。

  7. 可选地,要获取日志中特定行的链接,请点击步骤的行号。然后,您可以从 Web 浏览器的地址栏复制该链接。

    Screenshot of the logs for a job. The logs for a failed step are expanded, and a line number is highlighted with an orange outline.

搜索日志

您可以搜索构建日志以查找特定步骤。搜索日志时,结果仅包含已展开的步骤。执行这些步骤需要对仓库具有读取权限。

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在您的存储库名称下,单击 操作.

    Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline.

  3. 在左侧边栏中,单击您要查看的工作流。

    Screenshot of the left sidebar of the "Actions" tab. A workflow, "CodeQL," is outlined in dark orange.

  4. 从工作流运行列表中,单击运行的名称以查看工作流运行摘要。

  5. 在“作业”下或可视化图中,单击您要查看的作业。

  6. 在日志输出的右上角,在**搜索日志**搜索框中,输入搜索查询。

下载日志

您可以从工作流运行中下载日志文件。您还可以下载工作流的工件。有关更多信息,请参阅“存储和共享工作流数据”。执行这些步骤需要对仓库具有读取权限。

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在您的存储库名称下,单击 操作.

    Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline.

  3. 在左侧边栏中,单击您要查看的工作流。

    Screenshot of the left sidebar of the "Actions" tab. A workflow, "CodeQL," is outlined in dark orange.

  4. 从工作流运行列表中,单击运行的名称以查看工作流运行摘要。

  5. 在“作业”下或可视化图中,单击您要查看的作业。

  6. 在日志的右上角,选择下拉菜单,然后点击**下载日志归档**。

    Screenshot of the log for a job. In the header, a gear icon is outlined in dark orange.

注意

当您下载部分重新运行的工作流的日志归档时,该归档仅包含已重新运行的作业。要获取从工作流运行的作业的完整日志集,您必须下载运行其他作业的先前运行尝试的日志归档。

删除日志

您可以通过 GitHub Web 界面或以编程方式删除工作流运行中的日志文件。执行这些步骤需要对仓库具有写入权限。

通过 GitHub Web 界面删除日志

  1. 在 GitHub 上,导航到存储库的主页。

  2. 在您的存储库名称下,单击 操作.

    Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline.

  3. 在左侧边栏中,单击您要查看的工作流。

    Screenshot of the left sidebar of the "Actions" tab. A workflow, "CodeQL," is outlined in dark orange.

  4. 从工作流运行列表中,单击运行的名称以查看工作流运行摘要。

  5. 在右上角,选择下拉菜单,然后点击**删除所有日志**。

    Screenshot of the page for a workflow run. In the top-right corner, a button, labeled with a kebab icon, is outlined in dark orange.

  6. 查看确认提示。

删除日志后,将移除**删除所有日志**按钮,以指示工作流运行中不再存在任何日志文件。

以编程方式删除日志

您可以使用以下脚本自动删除工作流的所有日志。这是一种清理多个工作流运行的日志的有用方法。

要运行下面的示例脚本

  1. 复制代码示例并将其保存到名为 delete-logs.sh 的文件中。

  2. 使用 chmod +x delete-logs.sh 为其授予执行权限。

  3. 运行以下命令,其中 REPOSITORY_NAME 是您的仓库名称,WORKFLOW_NAME 是工作流的文件名。

    Shell
    ./delete-logs.sh REPOSITORY_NAME WORKFLOW_NAME
    

    例如,要删除 monalisa/octocat 仓库中 .github/workflows/ci.yaml 工作流的所有日志,您将运行 ./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 查看日志

要了解有关 GitHub CLI 的更多信息,请参阅“关于 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-failed 而不是 --log

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