今天来浅谈一下我对github.io和CICD的一些理解(不会有人上完软工还不会CICD吧.jpg)。虽然我早已用到了这些东西,但原理一直都没有试图弄懂过。
似乎github.io就是git page,它“可以展示你的项目及项目网站的托管工具,可以理解为免费的阿里云等服务器”。

关于github pages

推荐大家直接去看官方文档:https://docs.github.com/zh/pages/getting-started-with-github-pages/about-github-pages (那我还在这说个屁)。

这里摘要一些我能理解的部分:github pages的站点分为用户站点/项目站点/组织站点。

用户站点/组织站点每个用户只能有一个,这也是为什么大家都把用户站点当作博客的原因。用户站点的创造方式非常固定:仓库名必须为<username>.github.io(比如我的就是ShuoAndy.github.io)。除非使用的是自定义域(就像我之前买了个九块钱的域名一样),否则用户站点的url都是http(s)://<username>.github.io(比如https://shuoandy.github.io)。购买自定义域名之后可以在settings的git pages里的Custom domain中设定。事实上即便有了自定义域,这个默认的url也可以正确访问站点。

对于项目站点,每个用户可以有很多个,仓库名也可以随便取(比如我的five_is_worth_two文档就是项目站点)。除非使用的是自定义域,否则项目站点的url都是 http(s)://<username>.github.io/<repository>(比如https://shuoandy.github.io/five_is_worth_two)。【对于mkdocs来说,记得去settings的git pages将分支设置为gh-pages。】


github workflow(工作流)

在github中,actions的配置文件位于.github/workflows/目录下(是的这个目录名是固定的,不要打错字),文件名可以随便取,但后缀名必须为.yml或者.yaml。文件具体的配置字段如下(以Andy的软工文档为例):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
name: ci 
on:
push:
branches:
- main
permissions:
contents: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.x
- uses: actions/cache@v2
with:
key: ${{ github.ref }}
path: .cache
- run: pip install mkdocs-material
- run: mkdocs gh-deploy --force
  • name指这个工作流的名字,缺省值是这个文件的名字。

  • on是指定触发workflow的条件,例如这里是当git push了main分支之后会触发一系列的工作流。【Andy一开始没注意这个字段,导致push的一直是master分支而这里写的是main分支,结果一直没有触发工作流…】

  • permissions是工作流对本仓库的权限,不再赘述。

  • jobs是工作流的所有任务,其中runs-on指定了镜像的运行系统,相当于github在云端提供了一个虚拟机,这里用到了ubuntu-latest(网上说是ubuntu-18.04或ubuntu-16.04);steps指定了这个任务的所有步骤,uses都是预定义的工作流程步骤,例如actions/checkout@v3是将代码库放置在工作流的工作目录中;run就是具体的命令了,例如安装material主题(因为它不是mkdocs自带的主题)。