使用 Checkout Action 的 GitHub Actions

GitBeginner
立即练习

介绍

在这个实验中,你将学习如何使用 actions/checkout action,它是任何 GitHub Actions 工作流中最核心的步骤之一。默认情况下,GitHub Actions 运行器(runner)在一个空目录中启动。为了构建、测试或部署你的代码,你必须首先将仓库检出(check out)到运行器的工作空间(workspace)。

你将创建一个工作流文件,配置它来检出你的代码,然后通过在日志中列出文件来验证它们是否可访问。这个过程模拟了一个标准的持续集成(CI)管道设置。

本实验基于你在先前实验中创建的仓库。你将克隆 github-actions-demo 仓库并创建一个使用 checkout action 的新工作流。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 95%。获得了学习者 100% 的好评率。

在工作流中添加一个使用 actions/checkout@v4 的步骤

在这一步,你将克隆(clone)仓库并创建一个使用 actions/checkout 操作的工作流(workflow)。此操作会将你的仓库检出(checks out)到 $GITHUB_WORKSPACE 目录下,以便你的工作流可以访问它。

  1. 在你的 github-actions-demo 的 GitHub 仓库页面上,点击绿色的 Code 按钮。
  2. 确保选择了 HTTPS 标签页,并复制该 URL。它应该看起来像 https://github.com/your-username/github-actions-demo.git
  3. 在 LabEx 环境中打开终端。默认路径是 ~/project
  4. 使用 git clone 命令下载仓库。将 your-username 替换为你真实的 GitHub 用户名。
cd ~/project
git clone https://github.com/your-username/github-actions-demo.git
  1. 进入克隆的仓库目录:
cd ~/project/github-actions-demo
  1. .github/workflows 目录下创建一个名为 ci.yml 的新工作流文件:
touch .github/workflows/ci.yml
  1. 在 WebIDE 编辑器中打开 .github/workflows/ci.yml 并添加以下内容。此配置定义了一个名为 "CI" 的工作流,它在每次 push 事件时运行。它包含一个名为 build 的单一任务(job),在 ubuntu-latest 上运行,其中包含一个检出代码的步骤(step)。
name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

uses: actions/checkout@v4 这行代码告诉 GitHub Actions 下载并运行官方 checkout 操作的 v4 版本。

添加一个使用 ls -la 命令来列出文件的步骤

在这一步中,你将向工作流中添加第二个步骤,以验证 checkout action 是否成功检索了你的文件。你将使用一个标准的 shell 命令来列出当前目录中的文件。

打开 .github/workflows/ci.yml 文件,并将以下步骤追加到 steps 列表中。确保缩进与上一个步骤正确对齐。

- name: List files
  run: ls -la

你完整的 .github/workflows/ci.yml 文件现在应该如下所示:

name: CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: List files
        run: ls -la

run 关键字允许你执行命令行程序。在这里,ls -la 将列出仓库根目录下所有文件,包括隐藏文件。

在仓库中创建一个名为 index.js 的示例文件

在这一步,你将在你的仓库中创建一个示例文件。当我们在工作流日志中看到它被列出时,这个文件将作为 actions/checkout 动作正常工作的证明。

  1. 确保你位于仓库目录下:
cd ~/project/github-actions-demo
  1. 在你的仓库根目录下创建一个名为 index.js 的简单 JavaScript 文件:
echo "console.log('Hello, GitHub Actions!');" > index.js
  1. 你可以通过运行以下命令来验证文件是否创建成功:
ls -l index.js

这个文件代表了你的应用程序的源代码,通常 CI 流水线会对它进行构建或测试。

提交并推送示例文件和工作流更新

在此步骤中,你将提交更改并将其推送到 GitHub。推送此提交将触发我们定义的 workflow,这是由于 on: [push] 配置所致。

  1. 确保你位于仓库目录中:
cd ~/project/github-actions-demo
  1. 检查仓库的状态以查看未跟踪的文件:
git status

你应该会看到 .github/workflows/ci.ymlindex.js 是未跟踪的。

  1. 暂存所有更改:
git add .
  1. 使用描述性的消息提交更改:
git commit -m "Add CI workflow and index.js"

示例输出:

[main ... ] Add CI workflow and index.js
 2 files changed, 14 insertions(+), 0 deletions(-)
 create mode 100644 .github/workflows/ci.yml
 create mode 100644 index.js
  1. 将更改推送到 GitHub 上的远程仓库:
git push

关于认证的注意事项:
当你运行 git push 时,WebIDE 会自动提示你进行身份验证。请遵循以下详细步骤:

  1. 会弹出一个提示框,显示消息:"The extension 'GitHub' wants to sign in using GitHub." 点击 Allow
  2. 会出现一个新的通知。点击 "Copy&Continue to GitHub",然后在下一个提示中点击 "Open"
  3. 在打开的浏览器窗口中登录你的 GitHub 账户,并输入被复制的授权码。确认授权后,页面将自动关闭。
  4. 等待几秒钟,你将看到终端成功完成推送操作。

隐私声明: WebIDE 会请求对你的 GitHub 账户的完全访问权限以进行身份验证。你无需担心隐私问题——在当前实验(lab)完成后,LabEx 虚拟机将立即销毁,你的凭证和授权信息不会被保留。

此身份验证过程不需要手动配置用户名或 Personal Access Token。

示例输出:

Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 512 bytes | 512.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0), pack-reused 0
To https://github.com/your-username/github-actions-demo.git
   1234567..abcdef1  main -> main

此推送会触发 GitHub 上的 workflow。

检查工作流运行以验证日志中的文件列表

推送代码后,工作流将自动在 GitHub 上触发。你可以查看工作流运行日志,以验证 checkout action 是否成功检索到你的文件。

  1. 在网页浏览器中访问你的仓库:https://github.com/your-username/github-actions-demo
  2. 点击仓库页面顶部的 Actions 标签页。
  3. 你应该会看到一个工作流运行列表,其名称可能为 "Add CI workflow and index.js" 或 "CI"。

注意: 当你推送代码时,如果仓库中有多个工作流文件,可能会触发多个 Actions。请通过检查左侧边栏中的工作流名称或使用右侧的工作流运行列表来识别正确的工作流运行。

  1. 点击工作流运行标题,然后点击 build 任务(job)。
  2. 展开 List files 步骤以查看输出。

你应该会看到 ls -la 命令的输出,其中包含 index.js 和仓库中的其他文件:

Run ls -la
  ls -la
  shell: /usr/bin/bash -e {0}
total XX
drwxr-xr-x  X runner ... .
drwxr-xr-x  X runner ... ..
drwxr-xr-x  X runner ... .git
drwxr-xr-x  X runner ... .github
-rw-r--r--  X runner ... index.js
...

这确认了 actions/checkout 步骤已成功检出(checked out)你的仓库。如果没有 checkout 步骤,ls -la 命令将只显示一个空目录。这证明了 checkout action 的重要性——它使你的仓库文件对工作流运行器(workflow runner)可用。

GitHub Actions logs

总结

在这个实验(Lab)中,你成功创建了一个使用 actions/checkout action 的 GitHub Actions 工作流。你学会了如何:

  1. 设置 .github/workflows 目录结构。
  2. 定义一个在 push 事件上触发的工作流。
  3. 使用 actions/checkout@v4 将你的仓库克隆到运行器(runner)中。
  4. 添加一个步骤,使用 ls -la 来验证文件是否存在。

这是几乎所有 CI/CD 流水线(pipeline)的基础步骤,它使得后续的构建、测试和部署你的应用程序代码的步骤成为可能。