最近把自动发布从 travis-ci 换成了 github action

原因有三:

  1. github 开放免费私有仓库了,所以把这个博客的源码转成了私有的。
  2. travis-ci.org 不支持私有仓库 (travis-ci.com 是支持私有仓库的)。
  3. github 发布了自己的 actions 功能。

github actions

因为 CI/CD 服务的原理都差不多,所以迁移还是很顺利的。

这里记录几个内容,以后可能会用到。

关于内置变量

了解每个 CI/CD 程序提供的内置变量有利于写出高效、美观、简短的脚本。

GitHub Actions 提供的内置变量主要分为 github, job, steps, runner, secrets, strategy, matrix 几个部分,官方文档还给出了一个 .github\workflows\main.yml 的例子,可以自行打印出这些内置变量。

name: CI
on: [push]
jobs:
one:
runs-on: ubuntu-latest
steps:
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT"
- name: Dump job context
env:
JOB_CONTEXT: ${{ toJson(job) }}
run: echo "$JOB_CONTEXT"
- name: Dump steps context
env:
STEPS_CONTEXT: ${{ toJson(steps) }}
run: echo "$STEPS_CONTEXT"
- name: Dump runner context
env:
RUNNER_CONTEXT: ${{ toJson(runner) }}
run: echo "$RUNNER_CONTEXT"
- name: Dump secrets context
env:
SECRETS_CONTEXT: ${{ toJson(secrets) }}
run: echo "$SECRETS_CONTEXT"
- name: Dump strategy context
env:
STRATEGY_CONTEXT: ${{ toJson(strategy) }}
run: echo "$STRATEGY_CONTEXT"
- name: Dump matrix context
env:
MATRIX_CONTEXT: ${{ toJson(matrix) }}
run: echo "$MATRIX_CONTEXT"

关于 token

GitHub Actions 内置变量自带的 token 只能作用于当前仓库,如果需要操作其他仓库,就需要启用另外的 token 了。
https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line

  1. 先在账号Settings -> Developer settings -> Personal access tokens 中创建一个新的 token 。
  2. 再在仓库Settings -> Secrets 里添加这个 token 。
  3. 然后就可以在 Actions 中通过 ${{secrets.some_token}} 使用了。

关于 Submodule

用的最多的 uses: actions/checkout@v1 带有 submodule 功能,文档地址:https://github.com/actions/checkout
有一点要注意的是:Private submodules must be configured via https not ssh.,如果 submodule 失败,需要把 submodule 改成 https 协议。

- uses: actions/checkout@v1
with:
submodules: "true"
token: ${{secrets.GitHub_PAT}} # APT -> Personal access tokens