GitHub Actions教程
AWS 安全直播!
我们将继续推出关于如何优化 GitHub 工作流程的系列文章。我们已经讨论过GitHub 的基本工作流程。现在,让我们来看看 GitHub Actions。
GitHub Actions 乍看之下可能有些复杂,但实际上非常实用。它允许你在工作流程中设置自动任务,从而让你的工作更轻松、更有条理。
你可能想知道:
- “GitHub Actions”究竟是什么?
- 真的那么重要吗?
- 你如何使用它?
别担心!本文将解答所有这些问题。我们将解释什么是 GitHub Actions、它的主要组成部分、它的用途以及如何开始使用它。
什么是 GitHub Actions?
GitHub Actions 是一个可以帮助你构建更好软件的工具,它不针对特定的语言或平台,而是一项可以自动化工作流程的功能,例如自动化代码的构建、测试和部署,它通过与你的代码库集成来实现这一点,因此你可以将它与你的代码库一起使用。
GitHub Actions 组件:
您可以配置 GitHub Actions工作流,使其在仓库中发生特定事件时触发,例如创建拉取请求或创建问题。您的工作流包含一个或多个作业,这些作业可以按顺序或并行运行。每个作业都将在其自身的虚拟机运行器或容器中运行,并包含一个或多个步骤,这些步骤可以运行您定义的脚本或运行Action(一种可重用的扩展,可以简化您的工作流)。
-
工作流程:
- 工作流是一组自动化任务,这些任务描述在一个
YAML文件中。它通常位于.github/workflows代码仓库的根目录下。工作流描述了一个或多个可由代码推送、拉取请求等事件触发的作业。例如,您可以创建一个工作流,在每次拉取请求后运行测试。 yamlfile: 是一种人类可读的数据序列化标准,可以与所有编程语言结合使用,并且通常用于编写配置文件。.github目录:是 GitHub 用来存储仓库配置文件的一个特殊目录。它用于存储 GitHub Actions 工作流、问题模板和其他配置文件。
- 工作流是一组自动化任务,这些任务描述在一个
-
操作:
操作是可在工作流程中使用的可重用代码单元。它可以是单个命令,也可以是可运行的脚本。操作可用于自动化工作流程,例如构建、测试和部署代码。 -
事件:
事件是指代码仓库中触发工作流运行的特定活动。例如,推送代码、创建拉取请求或发布新版本。 -
运行器:
运行器是一台虚拟机,用于在工作流被触发时运行工作流。您可以将工作流配置为在特定的运行器上运行,例如 Ubuntu Linux、Microsoft Windows 或 macOS。 -
任务和步骤:
一个工作流由一个或多个任务组成,每个任务又包含多个步骤。每个步骤可以是待执行的 shell 脚本,也可以是待执行的操作。例如,您可以先执行一个构建应用程序的步骤,然后再执行一个运行测试的步骤。 -
密钥:
密钥是加密的环境变量,可在工作流中使用。您可以使用密钥存储敏感信息,例如 API 密钥、密码和令牌。例如,如果您想使用某个令牌VERCEL_TOKEN将应用程序部署到 Vercel,则可以将此令牌作为密钥存储在代码库中,并在工作流中使用它。
让我们一起创建一个简单的 GitHub Actions 工作流:
我们的任务是创建一个简单的 GitHub Actions 工作流,以便
在每次向代码仓库推送代码时运行 ESLint 代码检查。以下是具体实现方法:
-
在 GitHub 仓库的目录中创建一个工作流文件
.github/workflows。你可以随意命名该文件,但必须带有.yml扩展名。例如,你可以将其命名为main.yml. -
将以下代码添加到
main.yml文件中:name: Eslint check # name of the workflow on: [push] # the event that triggers the workflow jobs: eslint: # name of the job runs-on: ubuntu-latest # the runner that the job will run on steps: - name: start the job # name of the step run: echo "🚀 Start the job" # the command to run - name: Checkout code from repository uses: actions/checkout@v3 # an action to check out the code - name: Install dependencies run: npm ci # ci is used to install the dependencies faster than npm install - name: Run Eslint run: npx eslint . -
提交并推送更改到您的代码仓库。
-
查看您的工作流程结果:
- 在 GitHub 仓库中,点击“操作”选项卡。
- 你应该能看到你的工作流程正在运行或已经完成。

搞定!你已经创建了第一个 GitHub Actions 工作流。现在,每当你向代码仓库推送代码时,Eslint 都会对你的代码进行检查。
让我们创建一个更复杂的版本
我们的第二个任务是创建一个工作流,在每次向主分支推送或拉取请求时运行 ESLint 和 Prettier 检查并构建应用程序。
name: Eslint, Prettier, and Build
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
eslint:
name: Eslint checks
runs-on: ubuntu-latest
steps:
- name: Checkout code from repository
uses: actions/checkout@v3
- name: setup node environment
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run Eslint
run: npx eslint .
prettier:
name: Prettier checks
runs-on: ubuntu-latest
steps:
- name: Checkout code from repository
uses: actions/checkout@v3
- name: setup node environment
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run Prettier
run: npx prettier --check .
build:
name: Build the application
runs-on: ubuntu-latest
needs: # this is used to specify that this job depends on the previous jobs
- eslint
- prettier
steps:
- name: Checkout code from repository
uses: actions/checkout@v3
- name: setup node environment
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Build the application
run: npm run build
让我们创建第三个工作流程,也是最复杂的一个。
我们的第二个任务是创建一个工作流程,该流程对我们的代码运行 ESLint 和 Prettier 检查,运行 TypeScript 检查,构建应用程序,并在每次向主分支提交拉取请求时运行测试。
name: Eslint, Prettier, Typescript, Build, and Test
on:
pull_request:
branches:
- master
jobs:
eslint-prettier:
name: Eslint and Prettier checks
runs-on: ubuntu-latest
steps:
- name: Checkout code from repository
uses: actions/checkout@v3
- name: setup node environment
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run Eslint
run: npx eslint .
- name: Run Prettier
run: npx prettier --check .
typescript:
name: Typescript checks
runs-on: ubuntu-latest
steps:
- name: Checkout code from repository
uses: actions/checkout@v3
- name: setup node environment
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run Typescript checks
run: npx tsc --noEmit
build:
name: Build the application
runs-on: ubuntu-latest
needs:
- eslint-prettier
- typescript
steps:
- name: Checkout code from repository
uses: actions/checkout@v3
- name: setup node environment
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Build the application
run: npm run build
test:
name: Run tests
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout code from repository
uses: actions/checkout@v3
- name: setup node environment
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm test
工作流程如下:
总结:
GitHub Actions 是一款强大的工具,可帮助您自动化工作流程,让您的工作更轻松、更有条理。它允许您设置自动任务,例如构建、测试和部署代码。您可以使用它来自动化重复性任务,从而节省时间。
本文解释了 GitHub Actions 的概念、主要组成部分、用途以及如何入门。我们还创建了两个简单的 GitHub Actions 工作流示例。希望本文能帮助您更好地理解 GitHub Actions,以及如何利用它来改进您的工作流程。
资源:
文章:
- https://docs.github.com/en/actions/writing-workflows/quickstart
- https://spacelift.io/blog/github-actions-tutorial
- https://codefresh.io/learn/github-actions/github-actions-tutorial-and-examples/
- https://vercel.com/guides/how-can-i-use-github-actions-with-vercel
视频:
- https://www.youtube.com/watch?v=98YzP1CBTjk&t=562s
- https://www.youtube.com/watch?v=yfBtjLxn_6k&t=391s
- https://www.youtube.com/watch?v=mFFXuXjVgkU&t=360s
- https://www.youtube.com/watch?v=KnSBNd3b0qI

