GitHub Actions 第一个工作流创建

GitBeginner
立即练习

介绍

GitHub Actions 是一个持续集成和持续交付(CI/CD)平台,它允许你自动化你的构建、测试和部署流程。你可以创建工作流(workflows),对你仓库的每一次拉取请求(pull request)进行构建和测试,或者将合并后的拉取请求部署到生产环境。

在这个 Lab 中,你将创建你的第一个简单工作流。你将学习 GitHub Actions 所需的标准目录结构、如何定义工作流名称、如何指定触发工作流的事件,以及如何定义要执行命令的作业(jobs)。

这个 Lab 基于你在前一个 Lab 中创建的仓库。你将把 github-actions-demo 仓库克隆到你的 LabEx 环境中,并向其中添加你的第一个工作流文件。

在 .github/workflows 中创建一个名为 hello-world.yml 的新 YAML 文件

在这一步,你将克隆你在上一个实验中创建的仓库,并创建你的第一个工作流文件。

  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

示例输出:

Cloning into 'github-actions-demo'...
remote: Enumerating objects: X, done.
remote: Counting objects: 100% (X/X), done.
remote: Total X (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (X/X), done.
  1. 进入克隆下来的仓库目录:
cd ~/project/github-actions-demo
  1. .github/workflows 目录应该是在上一个实验中已经创建好的。验证它是否存在:
ls -R .github
  1. .github/workflows 目录下创建一个名为 hello-world.yml 的新文件。该文件将包含我们的工作流配置:
touch .github/workflows/hello-world.yml

你可以验证文件是否已成功创建:

ls -R .github

你应该会看到 workflows 目录中同时包含 main.yml(来自上一个实验)和 hello-world.yml

向 YAML 文件中添加 'name' 键,值为 'Hello World Workflow'

在这一步,你将开始编辑 YAML 文件来定义你的工作流(workflow)。我们通常添加的第一个元素是工作流的 name。这个名称将显示在 GitHub 仓库的 Actions 标签页中,便于识别。

使用 WebIDE 编辑器打开文件 hello-world.yml。你可以在左侧的文件浏览器中,于 project/github-actions-demo/.github/workflows/ 目录下找到该文件。

向文件中添加以下内容:

name: Hello World Workflow

这个键值对(key-value pair)为你的工作流分配了一个人类可读的名称。

添加内容后,保存文件(Ctrl+S 或 Cmd+S)。

你可以在终端中验证文件的内容:

cat .github/workflows/hello-world.yml

Verify workflow name

添加 'on' 键并配置 'push' 事件以在推送时触发

在这一步,你将定义工作流 何时 运行。这是使用 on 关键字完成的。我们希望每当代码被推送到仓库时,此工作流都能运行。

再次打开 .github/workflows/hello-world.yml 文件,并在 name 键的下方追加以下行:

on: [push]

你的文件现在应该看起来像这样:

name: Hello World Workflow
on: [push]

on: [push] 配置告诉 GitHub Actions 在每次对仓库中任何分支执行 git push 时触发此工作流。

注意: GitHub Actions 支持许多其他的触发事件。例如:

  • pull_request: 在拉取请求(pull request)被打开、同步或关闭时触发
  • workflow_dispatch: 允许从 GitHub Actions 标签页手动触发
  • schedule: 使用 cron 语法按计划运行
  • release: 在发布(release)被发布时触发
  • 以及更多事件,如 issuespull_request_review 等。

在这个 Lab 中,我们使用 on: [push],因为它最简单且最常见的触发器。在你深入学习 GitHub Actions 的过程中,可以探索其他触发器类型。

修改后保存文件。

添加 'jobs' 部分,其中包含一个名为 'build' 的 job

在这一步中,你将定义工作流 (workflow) 实际执行的工作内容。一次工作流运行 (workflow run) 由一个或多个 jobs 组成。默认情况下,实验 (jobs) 是并行运行的。

我们将添加一个名为 buildjobs 部分,其中包含一个实验。这个实验将在 Ubuntu 环境上运行,并执行一个简单的命令。

将以下内容追加到你的 .github/workflows/hello-world.yml 文件中:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Say Hello
        run: echo "Hello, World!"

我们来分解一下这部分的作用:

  • jobs:: 开始实验部分。
  • build:: 实验的 ID。
  • runs-on: ubuntu-latest: 指定在何种类型的机器(runner)上运行该实验。
  • steps:: 实验中要运行的任务列表。
  • run: echo "Hello, World!": 要执行的 shell 命令。

现在你的完整文件应该如下所示:

name: Hello World Workflow
on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Say Hello
        run: echo "Hello, World!"

保存文件。

使用 git 命令提交并推送工作流文件

在此步骤中,你将提交新的工作流文件并将其推送到 GitHub。这将触发你刚刚创建的工作流。

  1. 确保你位于仓库目录中:
cd ~/project/github-actions-demo
  1. 检查仓库状态,查看未跟踪的文件:
git status
  1. 将新文件添加到暂存区:
git add .github/workflows/hello-world.yml
  1. 使用描述性的消息提交更改:
git commit -m "Add hello world workflow"

示例输出:

[main ... ] Add hello world workflow
 1 file changed, X insertions(+), X deletions(-)
 create mode 100644 .github/workflows/hello-world.yml
  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 VM 将立即销毁,你的凭证和授权信息将不会被保留。

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

遵循身份验证步骤后,你将看到类似以下内容的输出:

示例输出:

Enumerating objects: X, done.
Counting objects: 100% (X/X), done.
Delta compression using up to 4 threads
Compressing objects: 100% (X/X), done.
Writing objects: 100% (X/X), XXX bytes | XXX.00 KiB/s, done.
Total X (delta X), reused X (delta X), pack-reused 0
To https://github.com/your-username/github-actions-demo.git
   XXXXXXX..XXXXXXX  main -> main
  1. 在 Web 浏览器中访问 GitHub 上的仓库,并导航到 Actions 标签页。你应该会看到 "Hello World Workflow" 正在运行或已完成。

Verify workflow run

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

  1. 点击工作流运行以查看详细的执行日志。你将看到:
    • 工作流名称:顶部显示 "Hello World Workflow"
    • Job 名称:左侧边栏显示 "build"
    • 步骤执行:点击 "build" job 展开它,然后点击 "Say Hello" 步骤
    • 输出:你应该在日志中看到输出 Hello, World!

Verify workflow run logs

这为你提供了工作流执行的完整视图,包括哪些步骤成功运行以及它们产生了什么输出。这对于调试和理解工作流的作用非常有用。

总结

在这个实验(Lab)中,你已成功创建了你的第一个 GitHub Actions 工作流。你学习了如何:

  1. 创建必需的 .github/workflows 目录结构。
  2. 使用 YAML 语法定义工作流。
  3. 使用 on 设置工作流的 name 和触发事件。
  4. 定义 jobssteps 来执行命令。
  5. 提交并推送工作流到仓库。

这些是创建复杂的 CI/CD 流水线(pipeline)的基础构建块,这些流水线可以自动构建、测试和部署你的软件。