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
如下图所示
- 切换视图,从左到右分别是,GUI 的方式编辑,直接编辑文件,查看变动
- workflow 区域,一个 main.workflow 文件下可以包含多个 workflow,每一个 workflow
- 每个 workflow 具体的编辑区域,每个 workflow 可以关联多个 action,每个 action 都有头尾两个点,点击下拉即可连接起来
- 保存提交按钮
Workflow edit
如下图所示,workflow 只有两个可选的修改项,分别是 Name 以及触发条件,触发条件公共仓库目前仅支持 push,私有仓库则支持 check_run、create、delete、issue comment, commit comment, pull request 等许多事件。完整的触发条件可以查看 Events supported in workflow files
action edit
如下图所示
- uses 使用的 docker 镜像, 在 https://github.com/actions 提供了一些常用的 actions 可以直接使用
{user}/{repo}/{path}@{ref}
直接使用公开的仓库,仓库里必须包含 dockerfile, path 为可选项,没有 path 默认为根路径,e.gactions/heroku@master
,actions/aws/ec2@v2.0.1
./path/to/dir
当前仓库的相对路径docker://{host}/{image}:{tag}
docker 镜像地址,host 为可选项,不填 host 默认从 dockerhub 拉取,e.gdocker://mohuishou/hugo:0.53
,docker://gcr.io/cloud-builders/gradle
- label 就是标签
- runs 覆盖 dockerfile 中的 entrypoint
- args 覆盖 dockerfile 中的 cmd
- secret 读取该仓库保存的秘密变量,将以环境变量的形式注入到运行的容器中
- env 注入到运行的容器中的环境变量,是可见的
创建 Action
Action 其实就是 Docker 镜像,按照 Docker 镜像的写法即可,需要关注以下几点
1. Dockerfile Lables
github actions 会读取 dockerfile 的 label 在 Workflow GUI 上做一些展示
1 |
|
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
遵循以下约定
- 你的博客源代码地址和 github pages 地址不同
- github pages 仓库地址为
youname.github.io
使用
创建文件 .github/main.workflow
1 |
|
环境变量
Key | Value | Must |
---|---|---|
TOKEN | 你的 github token,需要有 push 权限,保存在密码变量中 | yes |
你的邮箱 |
参考链接
关注我获取更新
猜你喜欢
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议,转载请注明出处,禁止全文转载