概述
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 语法来定义工作流程。 每个工作流都作为单独的 YAML 文件存储在代码存储库中名为 .github/workflows
的目录中。
您可以在仓库中创建示例工作流程,只要推送代码,该工作流程就会自动触发一系列命令。 在此工作流中,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@v3 - uses: actions/setup-node@v3 with: node-version: '14' - run: npm install -g bats - run: bats -v
-
提交这些更改并将其推送到您的 GitHub 仓库。
您的新 GitHub Actions 工作流程文件现在安装在您的仓库中,每次有人推送更改到仓库时都会自动运行。 若要查看关于工作流执行历史记录的详细信息,请参阅“查看工作流运行的活动”。
了解工作流程文件
为帮助您了解如何使用 YAML 语法来创建工作流程文件,本节解释介绍示例的每一行:
|
可选 - 工作流的名称,它将显示在 GitHub 存储库的“操作”选项卡中。 |
|
可选 - 从工作流生成的工作流运行的名称,该名称将显示在存储库的“操作”选项卡上的工作流运行列表中。此示例使用包含 |
|
指定此工作流程的触发器。 此示例使用 push 事件,因此每当有人将更改推送到存储库或合并拉取请求时都会触发工作流运行。 这是由到每个分支的推送触发的;有关仅在推送到特定分支、路径或标记时运行的语法示例,请参阅“GitHub Actions 的工作流语法”。
|
|
将 learn-github-actions 工作流中运行的所有作业组合在一起。
|
|
定义一个名为 check-bats-version 作业。 子键将定义作业的属性。
|
|
将作业配置为在最新版本的 Ubuntu Linux 运行器上运行。 这意味着该作业将在 GitHub 托管的新虚拟机上执行。 有关使用其他运行器的语法示例,请参阅“GitHub Actions 的工作流语法”。 |
|
将在 check-bats-version 作业中运行的所有步骤组合在一起。 此部分下嵌套的每项都是一个单独的操作或 shell 脚本。
|
|
uses 关键字指定此步骤将运行 actions/checkout 操作的 v3 。 这是一个将存储库签出到运行器上的操作,允许您对代码(如生成和测试工具)运行脚本或其他操作。 每当工作流程将针对存储库的代码运行时,都应使用签出操作。
|
|
此步骤使用 actions/setup-node@v3 操作安装指定的 Node.js 版本(本示例使用 v14)。 这会将 node 和 npm 命令都放在 PATH 中。
|
|
run 关键字指示作业在运行器上执行命令。 在这种情况下,你使用 npm 来安装 bats 软件测试包。
|
|
最后,你将使用输出软件版本的参数运行 bats 命令。
|
可视化工作流程文件
在此关系图中,您可以看到刚刚创建的工作流程文件,以及 GitHub Actions 组件在层次结构中的组织方式。 每个步骤执行单个操作或 shell 脚本。 步骤 1 和 2 运行操作,步骤 3 和 4 运行 shell 脚本。 若要为工作流查找更多预先创建的操作,请参阅“查找和自定义操作”。
查看工作流运行的活动
触发工作流时,将创建执行工作流的“工作流运行”。 工作流运行开始后,可以查看运行进度的可视化图表,并在 GitHub 上查看每个步骤的活动。
-
在 GitHub.com 上,导航到存储库的主页。 1. 在你的存储库名称下,单击 “操作”。
1. 在左侧边栏中,单击您想要查看的工作流程。 1. 在工作流运行列表中,单击运行的名称以查看工作流运行摘要。 -
在左侧边栏或可视化图效果中,单击要查看的作业。
-
要查看某个步骤的结果,请单击该步骤。
后续步骤
GitHub Actions 可以帮助您自动执行应用程序开发过程的几乎每个方面。 准备好开始了吗? 以下是一些帮助您对 GitHub Actions 执行后续操作的有用资源:
- 有关生成和测试代码的持续集成 (CI) 工作流,请参阅“自动构建和测试”。
- 有关生成和发布包,请参阅“发布包”。
- 有关部署项目,请参阅“部署”。
- 有关 GitHub 上的自动化任务和流程,请参阅“管理议题和拉取请求”。
- 有关演示 GitHub Actions 更复杂功能的示例,包括上述许多用例,请参阅“示例”。 你可以看到一些详细示例,这些示例说明如何在运行器上测试代码、访问 GitHub CLI 以及使用高级功能(如并发和测试矩阵)。
联系支持部门
如果需要任何与工作流配置相关的帮助,比如语法、GitHub 托管的运行器或生成操作,请在 GitHub Community 的 GitHub Actions 和 GitHub Packages 类别中查找现有主题或发起一个新主题。
如果您有对 GitHub Actions 的反馈或功能请求,请在 GitHub Actions 的 GitHub 社区讨论 中分享。
如有以下任意情况,无论您的使用或预期使用是否属于使用限制类别,都请联系 GitHub 支持:
- 如果您认为您的帐户受到不正确的限制
- 如果在执行一个操作时遇到意外错误D
- 如果你遇到与预期矛盾现有行为,但不一定是文件记录的情况。