概述
GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,允许您自动化构建、测试和部署管道。您可以创建工作流程,在每次向您的仓库提交拉取请求时进行构建和测试,或者将合并的拉取请求部署到生产环境。
GitHub Actions 不仅限于 DevOps,还允许您在仓库中发生其他事件时运行工作流程。例如,您可以运行一个工作流程,以便在有人在您的仓库中创建新问题时自动添加相应的标签。
GitHub 提供 Linux、Windows 和 macOS 虚拟机来运行您的工作流程,或者您可以在自己的数据中心或云基础设施中托管自己的自托管运行器。
GitHub Actions 的组成部分
您可以配置一个 GitHub Actions 工作流程,使其在仓库中发生 事件 时触发,例如打开拉取请求或创建问题。您的工作流程包含一个或多个 作业,这些作业可以按顺序或并行运行。每个作业将在自己的虚拟机 运行器 中运行,或在容器中运行,并且包含一个或多个 步骤,这些步骤要么运行您定义的脚本,要么运行 操作,操作是可重复使用的扩展,可以简化您的工作流程。
工作流程
工作流是一个可配置的自动化流程,它将运行一个或多个作业。工作流由存储在您的仓库中的 YAML 文件定义,并在您的仓库中发生事件时运行,也可以手动触发或按定义的计划触发。
工作流在仓库的 .github/workflows
目录中定义,一个仓库可以有多个工作流,每个工作流可以执行不同的任务集。例如,您可以有一个工作流来构建和测试拉取请求,另一个工作流在每次创建发布时部署您的应用程序,还有一个工作流在每次有人打开新问题时添加标签。
您可以在另一个工作流中引用工作流。有关更多信息,请参阅 "重用工作流."
有关工作流的更多信息,请参阅 "使用工作流."
事件
事件是仓库中触发工作流运行的特定活动。例如,活动可以源自 GitHub,当有人创建拉取请求、打开问题或将提交推送到仓库时。您也可以在 计划 上触发工作流运行,通过 发布到 REST API,或手动触发。
有关可用于触发工作流的事件的完整列表,请参阅 触发工作流的事件.
作业
作业是在同一运行器上执行的工作流中的一组步骤。每个步骤要么是将要执行的 shell 脚本,要么是将要运行的操作。步骤按顺序执行,并且相互依赖。由于每个步骤都在同一运行器上执行,因此您可以将数据从一个步骤共享到另一个步骤。例如,您可以有一个步骤来构建您的应用程序,然后是一个步骤来测试已构建的应用程序。
您可以使用其他作业配置作业的依赖项;默认情况下,作业没有依赖项,并且彼此并行运行。当一个作业依赖于另一个作业时,它将等待依赖作业完成才能运行。例如,您可能有多个针对不同架构的构建作业,它们没有依赖项,以及一个依赖于这些作业的打包作业。构建作业将并行运行,当它们全部成功完成时,打包作业将运行。
有关作业的更多信息,请参阅 "使用作业."
操作
操作是 GitHub Actions 平台上的自定义应用程序,用于执行复杂但经常重复的任务。使用操作可以帮助减少在工作流文件中编写的重复代码量。操作可以从 GitHub 拉取您的 Git 仓库,为您的构建环境设置正确的工具链,或设置与您的云提供商的认证。
您可以编写自己的操作,也可以在 GitHub Marketplace 中找到要在工作流中使用的操作。
有关更多信息,请参阅“创建操作”。
运行器
运行器是运行工作流的服务器,当工作流被触发时,运行器会运行它们。每个运行器一次只能运行一个作业。GitHub 提供 Ubuntu Linux、Microsoft Windows 和 macOS 运行器来运行您的工作流;每个工作流运行都在一个全新的、新配置的虚拟机中执行。GitHub 还提供更大的运行器,这些运行器以更大的配置提供。有关更多信息,请参阅“关于更大的运行器”。如果您需要不同的操作系统或需要特定的硬件配置,您可以托管自己的运行器。有关自托管运行器的更多信息,请参阅“托管自己的运行器”。
创建示例工作流
GitHub Actions 使用 YAML 语法来定义工作流。每个工作流都存储在代码仓库中的一个名为 .github/workflows
的目录中,作为一个单独的 YAML 文件。
您可以在仓库中创建一个示例工作流,该工作流会在每次推送代码时自动触发一系列命令。在此工作流中,GitHub Actions 会检出推送的代码,安装 bats 测试框架,并运行一个基本命令来输出 bats 版本:bats -v
。
-
在您的仓库中,创建
.github/workflows/
目录来存储您的工作流文件。 -
在
.github/workflows/
目录中,创建一个名为learn-github-actions.yml
的新文件,并添加以下代码。YAML name: learn-github-actions run-name: ${{ github.actor }} is learning GitHub Actions on: [push] jobs: check-bats-version: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm install -g bats - run: bats -v
name: learn-github-actions run-name: ${{ github.actor }} is learning GitHub Actions on: [push] jobs: check-bats-version: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - run: npm install -g bats - run: bats -v
-
提交这些更改并将其推送到您的 GitHub 仓库。
您的新 GitHub Actions 工作流程文件现在已安装在您的仓库中,并且将在每次有人将更改推送到仓库时自动运行。要查看有关工作流程执行历史记录的详细信息,请参阅“查看工作流程运行的活动”。
了解工作流程文件
为了帮助您了解如何使用 YAML 语法创建工作流程文件,本节将解释介绍示例中的每一行。
# Optional - The name of the workflow as it will appear in the "Actions" tab of the GitHub repository. If this field is omitted, the name of the workflow file will be used instead. name: learn-github-actions # Optional - The name for workflow runs generated from the workflow, which will appear in the list of workflow runs on your repository's "Actions" tab. This example uses an expression with the `github` context to display the username of the actor that triggered the workflow run. For more information, see "[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#run-name)." run-name: ${{ github.actor }} is learning GitHub Actions # Specifies the trigger for this workflow. This example uses the `push` event, so a workflow run is triggered every time someone pushes a change to the repository or merges a pull request. This is triggered by a push to every branch; for examples of syntax that runs only on pushes to specific branches, paths, or tags, see "[AUTOTITLE](/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)." on: [push] # Groups together all the jobs that run in the `learn-github-actions` workflow. jobs: # Defines a job named `check-bats-version`. The child keys will define properties of the job. check-bats-version: # Configures the job to run on the latest version of an Ubuntu Linux runner. This means that the job will execute on a fresh virtual machine hosted by GitHub. For syntax examples using other runners, see "[AUTOTITLE](/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)" runs-on: ubuntu-latest # Groups together all the steps that run in the `check-bats-version` job. Each item nested under this section is a separate action or shell script. steps: # The `uses` keyword specifies that this step will run `v4` of the `actions/checkout` action. This is an action that checks out your repository onto the runner, allowing you to run scripts or other actions against your code (such as build and test tools). You should use the checkout action any time your workflow will use the repository's code. - uses: actions/checkout@v4 # This step uses the `actions/setup-node@v4` action to install the specified version of the Node.js. (This example uses version 20.) This puts both the `node` and `npm` commands in your `PATH`. - uses: actions/setup-node@v4 with: node-version: '20' # The `run` keyword tells the job to execute a command on the runner. In this case, you are using `npm` to install the `bats` software testing package. - run: npm install -g bats # Finally, you'll run the `bats` command with a parameter that outputs the software version. - run: bats -v
name: learn-github-actions
可选 - 工作流程的名称,它将显示在 GitHub 仓库的“操作”选项卡中。如果省略此字段,将使用工作流程文件的名称。
run-name: ${{ github.actor }} is learning GitHub Actions
可选 - 从工作流程生成的运行的名称,它将显示在仓库的“操作”选项卡上的工作流程运行列表中。此示例使用带有 github
上下文的表达式来显示触发工作流程运行的执行者的用户名。有关更多信息,请参阅“GitHub Actions 的工作流程语法”。
on: [push]
指定此工作流程的触发器。此示例使用 push
事件,因此每次有人将更改推送到仓库或合并拉取请求时,都会触发工作流程运行。这是由对每个分支的推送触发的;有关仅在对特定分支、路径或标签的推送运行的语法示例,请参阅“GitHub Actions 的工作流程语法”。
jobs:
将所有在 learn-github-actions
工作流程中运行的作业分组在一起。
check-bats-version:
定义一个名为 check-bats-version
的作业。子键将定义作业的属性。
runs-on: ubuntu-latest
配置作业在最新版本的 Ubuntu Linux 运行器上运行。这意味着作业将在 GitHub 托管的新虚拟机上执行。有关使用其他运行器的语法示例,请参阅“GitHub Actions 的工作流程语法”。
steps:
将所有在 check-bats-version
作业中运行的步骤分组在一起。此部分下的每个项目都是一个单独的操作或 shell 脚本。
- uses: actions/checkout@v4
uses
关键字指定此步骤将运行 actions/checkout
操作的 v4
版本。这是一个将您的仓库检出到运行器的操作,允许您对代码运行脚本或其他操作(例如构建和测试工具)。如果您的工作流程将使用仓库的代码,则应使用 checkout 操作。
- uses: actions/setup-node@v4
with:
node-version: '20'
此步骤使用 `actions/setup-node@v4` 操作来安装指定版本的 Node.js。(此示例使用版本 20。)这会将 `node` 和 `npm` 命令都放入您的 `PATH` 中。
- run: npm install -g bats
`run` 关键字告诉作业在运行器上执行命令。在本例中,您使用 `npm` 来安装 `bats` 软件测试包。
- run: bats -v
最后,您将使用一个参数运行 `bats` 命令,该参数输出软件版本。
# Optional - The name of the workflow as it will appear in the "Actions" tab of the GitHub repository. If this field is omitted, the name of the workflow file will be used instead.
name: learn-github-actions
# Optional - The name for workflow runs generated from the workflow, which will appear in the list of workflow runs on your repository's "Actions" tab. This example uses an expression with the `github` context to display the username of the actor that triggered the workflow run. For more information, see "[AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#run-name)."
run-name: ${{ github.actor }} is learning GitHub Actions
# Specifies the trigger for this workflow. This example uses the `push` event, so a workflow run is triggered every time someone pushes a change to the repository or merges a pull request. This is triggered by a push to every branch; for examples of syntax that runs only on pushes to specific branches, paths, or tags, see "[AUTOTITLE](/actions/reference/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore)."
on: [push]
# Groups together all the jobs that run in the `learn-github-actions` workflow.
jobs:
# Defines a job named `check-bats-version`. The child keys will define properties of the job.
check-bats-version:
# Configures the job to run on the latest version of an Ubuntu Linux runner. This means that the job will execute on a fresh virtual machine hosted by GitHub. For syntax examples using other runners, see "[AUTOTITLE](/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on)"
runs-on: ubuntu-latest
# Groups together all the steps that run in the `check-bats-version` job. Each item nested under this section is a separate action or shell script.
steps:
# The `uses` keyword specifies that this step will run `v4` of the `actions/checkout` action. This is an action that checks out your repository onto the runner, allowing you to run scripts or other actions against your code (such as build and test tools). You should use the checkout action any time your workflow will use the repository's code.
- uses: actions/checkout@v4
# This step uses the `actions/setup-node@v4` action to install the specified version of the Node.js. (This example uses version 20.) This puts both the `node` and `npm` commands in your `PATH`.
- uses: actions/setup-node@v4
with:
node-version: '20'
# The `run` keyword tells the job to execute a command on the runner. In this case, you are using `npm` to install the `bats` software testing package.
- run: npm install -g bats
# Finally, you'll run the `bats` command with a parameter that outputs the software version.
- run: bats -v
可视化工作流程文件
在此图中,您可以看到您刚刚创建的工作流程文件以及 GitHub Actions 组件如何在层次结构中组织。每个步骤执行单个操作或 shell 脚本。步骤 1 和 2 运行操作,而步骤 3 和 4 运行 shell 脚本。要查找更多用于工作流程的预构建操作,请参阅“查找和自定义操作”。
查看工作流程运行的活动
当您的工作流程被触发时,会创建一个执行工作流程的工作流程运行。工作流程运行启动后,您可以在 GitHub 上看到运行进度可视化图表,并查看每个步骤的活动。
-
在 GitHub.com 上,导航到存储库的主页。
-
在您的存储库名称下,单击 操作.
-
在左侧边栏中,单击您要查看的工作流程。
-
从工作流程运行列表中,单击运行的名称以查看工作流程运行摘要。
-
在左侧边栏或可视化图表中,单击您要查看的作业。
-
要查看步骤的结果,请单击该步骤。
后续步骤
GitHub Actions 可以帮助您自动化应用程序开发过程的几乎所有方面。准备开始了吗?以下是一些使用 GitHub Actions 迈出下一步的有用资源。
- 要快速创建 GitHub Actions 工作流程,请参阅“使用入门工作流程”。
- 要了解用于构建和测试代码的持续集成 (CI) 工作流程,请参阅“自动化构建和测试”。
- 要了解如何构建和发布包,请参阅“发布包”。
- 有关部署项目的更多信息,请参阅“部署”。
- 有关在 GitHub 上自动执行任务和流程的更多信息,请参阅“管理问题和拉取请求”。
- 有关演示 GitHub Actions 更复杂功能的示例(包括上述许多用例),请参阅“示例”。您可以查看详细的示例,这些示例解释了如何在运行器上测试代码、访问 GitHub CLI 以及使用并发和测试矩阵等高级功能。
- 如果您想证明您在使用 GitHub Actions 自动化工作流程和加速开发方面的熟练程度,您可以通过 GitHub 认证获得 GitHub Actions 证书。有关更多信息,请参阅“关于 GitHub 认证”。