Github Actions简介

简介

GitHub Actions可帮助开发人员在软件开发生命周期内自动化任务。 GitHub Actions 是事件驱动的,这意味着可以在发生指定事件后运行一系列命令。例如,每当有人为仓库新建pr时,可以自动运行测试脚本。

该图演示了如何使用 GitHub Actions 自动运行软件测试脚本。事件自动触发包job含的workflow。然后,job将使用step来控制action的执行顺序。这些action即是自动化测试软件的命令。

Workflow overview

Github Actions 的组件

以下是可协同运行job的多个GitHub Actions组件的列表。可以看到这些组件之间如何交互

Component and service overview

workflow

workflow您添加到代码仓库中的自动化过程。其由一个或多个job组成,可以由事件调度或触发。该workflow可用于在 GitHub 上构建,测试,打包,发布或部署项目。

Events

event是触发workflow的特定活动。例如,当有人将commit 推送到仓库或创建issuepr时,Github 会产生envent。还可以使用 repository dispatch webhook在发生外部事件时触发workflow。有关可用于触发workflowevrnt的完整列表,查看Events that trigger workflows

Jobs

job是在同一runner上执行的一组step。默认情况下,具有多个jobworkflow程将并行运行这些job。还可以配置workflow以按顺序运行job。例如,一个workflow可以有两个顺序执行的job来构建和测试代码,其中测试job取决于构建job的状态。如果构建job失败,则测试job将不会运行。

Steps

step是可以在job中运行命令的单个任务。step可以是操作或shell命令。job中的每个step都在同一runner上执行,从而使该job中的操作可以彼此共享数据。

Actions

action是独立的命令,组合成step以构建job, action是工作流中最小的可移植构建块。可以创建自己的action,也可以使用 GitHub 社区创建的action。要在工作流中使用action,必须将其包括在一个step中。

Runners

runner是已安装GitHub Actions runner 应用程序的服务器。可以使用 GitHub 托管的runner,也可以使用自己的runnerrunner监听可用的job,一次运行一个job,并将进度,日志和结果反馈给 GitHub。对于由 GitHub 托管的runnerworkflow中的每个job都在全新的虚拟环境中运行。

GitHub 托管的runner基于 Ubuntu Linux,Microsoft Windows 和 macOS。有关 GitHub 托管的runner的信息,请参阅”Virtual environments for GitHub-hosted runners“。如果需要其他的 OS 或特定的硬件配置,则可以托管自己的runner。有关自托管runner的信息,请参阅”Hosting your own runners“。

创建样例 workflow

GitHub Actions 使用YAML语法定义eventjobstep。这些 YAML 文件存储在代码存储库中的.github / workflows目录中。

可以在仓库中创建示例的workflow,该workflow在每次推送代码时自动触发一系列命令。在此workflow中,GitHub Actions 使用了actions marketcheckoutsetup-node action,然后安装软件依赖项,并运行bat -v

  • 首先在项目中创建.github/workflow目录

  • 在其中,创建一个learn-github-actions.yml文件,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    name: learn-github-actions
    on: [push]
    jobs:
    check-bats-version:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: actions/setup-node@v1
    - run: npm install -g bats
    - run: bats -v
  • commit这些修改并且push代码到仓库

现在,新的GitHub Actions工作流文件已安装在代码仓库中,并且每次有人将更改推送到仓库时,它将自动运行。有关作业的执行历史记录的详细信息,请参阅”Viewing the workflow’s activity“。

要更详细了解workflow文件,参阅Understanding the workflow file

自动构建 Hexo 博客

配置密钥

首先生成一对新的密钥

1
ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f github-deploy-key -N ""

在对应的 gihtub 仓库设置中的Deploy keys,将刚才生成的密钥对中的公钥添加进去;然后在设置中的Secrets里面新建一个Secret,名为DEPLOY_KEY,将刚才生成的密钥对中的私钥添加进去.

配置workflow

在项目根目录下新建.github/workflow/ci.yaml,内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
name: Deploy

on:
push:
branches:
- hexo
pull_request:
branches:
- hexo
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: hexo
- uses: actions/setup-node@v2
with:
node-version: "12"
- name: Cache node modules
uses: actions/cache@v2
env:
cache-name: cache-node-modules
with:
# npm cache files are stored in `~/.npm` on Linux/macOS
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: Install Dependencies
run: |
npm install -g hexo-cli
npm install
- name: build
run: |
hexo g
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
deploy_key: ${{ secrets.DEPLOY_KEY }}
publish_dir: public

上面使用了actions/cache@v2l github actions market 中的peaceiris/actions-gh-pages@v3,让部署博客更加简单.

不过部署 Hexo 博客的话,目前 Vercel 更简单,在国内访问也更快,本博客的 Github Actions 已经被禁用了,由 vercel 进行部署.

作者

Naruto210

发布于

2020-06-19

更新于

2021-04-07

许可协议

评论