简介
GitHub Actions 是 GitHub 内置的工作流自动化系统。它会响应代码推送、拉取请求或手动触发等仓库事件,然后自动运行预先定义的作业。
这类自动化可以执行许多 DevOps 任务,例如测试代码、构建制品和部署应用程序。这些指令的集合称为工作流。
从更高层次看,工作流是流水线定义。它把仓库事件转换为可重复的自动化流程,因此每次执行相同的步骤时,都不依赖某个人是否记得正确操作。
在本实验中,你将为这个机器人编写第一份操作说明(工作流)。你将学习构成每个工作流的四个基本组件:
- 触发器:机器人什么时候应该被唤醒?(例如,推送代码时。)
- 作业:机器人需要执行什么主要任务?
- 运行器:机器人应该使用哪台计算机完成任务?
- 步骤:机器人应该执行哪些具体命令?
完成本实验后,你将拥有一个可运行的流水线:每次更新代码时,它都会自动输出一条问候信息。
前置条件
GitHub Actions 很重要,因为现代软件交付依赖可重复的自动化流程,而不是手动点击并依靠记忆执行步骤。
创建仓库
要开始使用 GitHub Actions,首先需要在 GitHub 上创建一个项目。我们将为本模块创建一个全新的仓库。后续多个实验都会使用这个仓库,因此请仔细遵循命名约定。
打开 Web 浏览器并登录 GitHub。点击任意 GitHub 页面右上角的 + 图标,然后选择 New repository。
在「Repository name」字段中输入 github-actions-basics。将仓库设置为 Public,可以免费且方便地使用。勾选 Add a README file,使用一个文件初始化仓库。最后,点击 Create repository 按钮。

现在项目已经存在于云端(GitHub),你需要将它复制到本实验环境中,才能在这里操作。这个过程称为克隆。
在下方的终端中使用 git clone 命令。你必须将 your-username 替换为自己的 GitHub 用户名。
cd ~/project
git clone https://github.com/your-username/github-actions-basics.git
克隆完成后,你会看到一个名为 github-actions-basics 的新目录。进入该目录开始操作。
cd ~/project/github-actions-basics
GitHub Actions 对工作流文件的位置有严格要求。它只会检查名为 .github 的特定隐藏目录,以及其中名为 workflows 的子目录。如果把工作流文件放在其他位置,机器人助手将直接忽略它们。
创建所需的目录结构。-p 选项表示:如果父目录和子目录不存在,命令会一次性创建它们。
mkdir -p .github/workflows
接下来,在这个新目录中创建一个名为 main.yml 的空文件。稍后将在该文件中编写工作流指令。
touch .github/workflows/main.yml
递归列出文件,确认设置是否正确。你应该看到 .github 目录,其中包含 workflows 目录,而 workflows 中又包含 main.yml。
ls -R .github
定义触发器
工作流文件使用 YAML 编写。这是一种简单的文本格式,通过缩进(空格)来组织信息,类似于大纲使用缩进表示层级关系。
每个工作流都需要名称和触发器。触发器用于告诉机器人什么时候开始工作。没有触发器,工作流就永远不会运行。我们希望机器人每次向仓库推送新代码时都被唤醒。
这种事件驱动模型是 CI/CD 系统背后的主要理念之一。流水线会响应软件生命周期中的变化,而不是等待某个人手动运行脚本。
使用 nano 文本编辑器打开空的 main.yml 文件。
nano .github/workflows/main.yml
将以下内容输入文件。
name: First Workflow
on: push
name 关键词为工作流设置一个标签,该标签会显示在 GitHub 上。on: push 这一行表示:「发生 push 事件时,运行此工作流。」
按 Ctrl+X,然后按 Y,最后按 Enter,保存更改并退出编辑器。
定义作业和运行器
现在机器人已经知道什么时候被唤醒,接下来需要告诉它在哪里工作。这就是定义作业和运行器。
作业是一组任务。你可以定义多个作业,例如「测试代码」和「部署应用」,但现在只创建一个作业。
运行器是 GitHub 提供的、用于执行作业的服务器。你可以把它理解为机器人助手工作的计算机。我们将使用 ubuntu-latest,这表示 GitHub 会提供一台运行最新版本 Ubuntu Linux 的全新计算机。
使用全新的运行器很重要,因为工作流作业应该具备可重复性。每次运行都会从干净的环境开始,而不是依赖之前手动设置留下的内容。
再次打开 main.yml 文件。
nano .github/workflows/main.yml
将以下内容添加到文件末尾。特别注意空格。在 YAML 中,缩进非常重要。first-job 应缩进两个空格,runs-on 应缩进四个空格。
jobs:
first-job:
runs-on: ubuntu-latest
现在,完整文件应与下面的内容一致。确保结构完全匹配。
name: First Workflow
on: push
jobs:
first-job:
runs-on: ubuntu-latest
保存并退出编辑器(Ctrl+X、Y、Enter)。
添加步骤并推送
现在我们已经定义了「什么时候」(push 时)和「在哪里」(ubuntu-latest)。接下来是最重要的部分:「做什么」。这部分由 Steps 区域定义。
步骤就是机器人实际执行的命令。在本实验中,我们只让机器人输出一条问候信息。使用 run 关键词执行标准 Linux 命令。
最后一次打开 main.yml。
nano .github/workflows/main.yml
在 first-job 下方添加 steps 区域。确保 steps: 与 runs-on: 垂直对齐。
steps:
- name: Print greeting
run: echo "Hello World from LabEx"
连字符 - 表示列表项。这里列出了该作业的步骤。
最终文件必须与下面完全一致:
name: First Workflow
on: push
jobs:
first-job:
runs-on: ubuntu-latest
steps:
- name: Print greeting
run: echo "Hello World from LabEx"
保存并退出编辑器。
现在操作说明已经完成,需要将它发送到 GitHub。机器人只会读取 GitHub 上的代码,不会读取本地计算机上的代码。
运行标准 Git 命令,保存并上传更改。
git add .
git commit -m "Add my first workflow"
git push
系统会要求你输入 GitHub 用户名和密码。
重要提示:如果看到关于不再支持密码身份验证的错误,必须使用 **Personal Access Token (PAT)**,不能使用账户密码。你可以在 GitHub 的 Settings -> Developer settings -> Personal access tokens 中生成令牌。选择「Tokens (classic)」,生成一个具有 repo 作用域的新令牌,并在终端询问密码时粘贴该令牌。

推送成功后,切换到浏览器。进入仓库页面,找到顶部的 Actions 选项卡。
你应该会看到一个名为「First Workflow」的工作流列表项。它可能显示黄色旋转圆圈(正在运行),也可能显示绿色对勾(运行成功)。点击该工作流,然后点击其中的 first-job 查看详细信息。展开「Print greeting」步骤后,你可以在日志中看到输出的「Hello World from LabEx」信息!

总结
恭喜你!你已经成功创建并运行了第一个 GitHub Actions 工作流。
在本实验中,你学习了工作流文件的四个核心组成部分:
- 触发器(
on):告诉操作何时开始。 - 作业:将任务组合在一起。
- 运行器(
runs-on):指定服务器环境。 - 步骤:定义要运行的实际命令。
现在,你已经有一个实时运行的「机器人助手」在监视仓库。接下来的实验中,我们将教这个助手完成更多实用任务,例如自动测试代码!



