目录

Github Actions简介

简介

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

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

/Github-Actions-Intro/overview-actions-simple.png

Github Actions 的组件

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

/Github-Actions-Intro/overview-actions-design.png

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

自动构建 Hugo 博客

配置密钥

首先生成一对新的密钥

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/gh-pages.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
name: Build GH-Pages

on:
  push:
    branches:
      - hugo
  workflow_dispatch:
    # manual run

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Git checkout
        uses: actions/checkout@v2
        with:
          ref: hugo

      - name: Get Theme
        run: git submodule update --init --recursive

      - name: Update theme to Latest commit
        run: git submodule update --remote --merge

      - uses: actions/cache@v2
        with:
          path: /tmp/hugo_cache
          key: ${{ runner.os }}-hugomod-${{ hashFiles('**/go.sum') }}
          restore-keys: |
                        ${{ runner.os }}-hugomod-
      - name: Build
        run: hugo --buildDrafts --gc --verbose --minify

      - name: Setup hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: "latest"

      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.DEPLOY_KEY }}
          publish_dir: ./public

不过部署 Hexo 博客的话,目前 Vercel 更简单,在国内访问也更快.