Github Actions介绍&自动构建Github Pages博客

本文将主要讲述如何创建一个自定义的Github Actions, 并且使用Github Actions 完成 CI/CD的操作

故事的起因就是,github的私有仓库免费了, 打算将blog仓库切换为私有仓库,这样可以同时将笔记和博客放在一块,利用hugo的draft功能,将不想发布的文章设置true即可。

修改之后由于之前使用Travis CI自动构建博客的静态页面,而Travis CI对于私有仓库只能试用100次,正好之前获得了Github Actions的测试资格,但是一直都还没有使用过,本次记录一下Github Actions的使用过程

Actions

actions可以用来作为CI/CD使用,但是它不只是CI/CD,因为它其实是一组docker容器所组成的Workflow,Workflow的触发条件,公共仓库目前仅支持push,私有仓库则支持check_run、create、delete、issue comment, commit comment, pull request等许多事件, 通过这些事件,可以完成除了CI/CD之外的许多自动化操作,例如接收到issue comment之后使用telegram bot发送通知等等

创建一个Workflow

如果你有权限的话,在你的仓库下应该可以看到一个Actions的菜单

Workflow GUI

如下图所示

  1. 切换视图,从左到右分别是,GUI的方式编辑,直接编辑文件,查看变动
  2. workflow区域,一个main.workflow文件下可以包含多个workflow,每一个workflow
  3. 每个workflow具体的编辑区域,每个workflow可以关联多个action,每个action都有头尾两个点,点击下拉即可连接起来
  4. 保存提交按钮

Workflow edit

如下图所示,workflow只有两个可选的修改项,分别是Name以及触发条件,触发条件公共仓库目前仅支持push,私有仓库则支持check_run、create、delete、issue comment, commit comment, pull request等许多事件。完整的触发条件可以查看 Events supported in workflow files

action edit

如下图所示

  1. uses 使用的docker镜像, 在 https://github.com/actions 提供了一些常用的actions可以直接使用
    1. {user}/{repo}/{path}@{ref} 直接使用公开的仓库,仓库里必须包含dockerfile, path为可选项,没有path默认为根路径,e.g actions/heroku@master, `actions/aws/ec2@v2.0.1`
    2. ./path/to/dir当前仓库的相对路径
    3. docker://{host}/{image}:{tag} docker镜像地址,host为可选项,不填host默认从dockerhub拉取,e.g docker://mohuishou/hugo:0.53, docker://gcr.io/cloud-builders/gradle
  2. label 就是标签
  3. runs 覆盖dockerfile中的 entrypoint
  4. args 覆盖dockerfile中的 cmd
  5. secret 读取该仓库保存的秘密变量,将以环境变量的形式注入到运行的容器中
  6. env 注入到运行的容器中的环境变量,是可见的

创建Action

Action其实就是Docker镜像,按照Docker镜像的写法即可,需要关注以下几点

1. Dockerfile Lables

github actions 会读取dockerfile的label在Workflow GUI上做一些展示

1
2
3
4
5
6
7
8
LABEL "com.github.actions.name"="" #Github action 的名字
LABEL "com.github.actions.description"="desc" #说明
LABEL "com.github.actions.icon"="mic" #GUI上展示的图标
LABEL "com.github.actions.color"="purple" # GUI上展示的颜色

LABEL "repository"="http://github.com/mohuishou/hugo-action" # 仓库地址
LABEL "homepage"="http://github.com/mohuishou" # 主页
LABEL "maintainer"="mohuishou <1@lailin.xyz>" # 作者

2. Env

默认的环境变量,以及如何读取

默认环境变量

所有的默认值可以参考这里 Environment variables

常用的主要有

Environment variable Description
GITHUB_ACTOR 用户的名字
GITHUB_REPOSITORY 用户和仓库的地址 例如 mohuishou/hugo-action
GITHUB_WORKSPACE github的工作区, 默认值为 /github/workspace
GITHUB_TOKEN workflow的github token可以用来clone拉取数据,但是没有push的权限
读取环境变量

读取环境变量时需要注意,环境变量是在容器运行时注入的,所以在dockerfile里面没有办法直接使用

使用hugo-action自动build&push博客

https://github.com/mohuishou/hugo-action

遵循以下约定

  1. 你的博客源代码地址和github pages地址不同
  2. github pages仓库地址为 youname.github.io

使用

创建文件 .github/main.workflow

1
2
3
4
5
6
7
8
9
10
11
12
13
14
workflow "blog ci/cd" {
on = "push"
resolves = ["hugo"]
}

action "hugo" {
uses = "docker://mohuishou/hugo-action:0.53"
secrets = [
"TOKEN",
]
env = {
EMAIL = "1@lailin.xyz"
}
}

环境变量

Key Value Must
TOKEN 你的github token,需要有push权限,保存在密码变量中 yes
EMAIL 你的邮箱

参考链接

  1. 官方文档
  2. GitHub Actions 介绍,了解一下?
  3. Github Actions Repo
  • 本文作者: mohuishou <1@lailin.xyz>
  • 本文链接: https://lailin.xyz/post/28054.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!