Skip to content
imbajin edited this page Mar 23, 2023 · 2 revisions

Welcome to the nocode wiki! Here we introduce some useful action skills

前言

众所周知, 现在 GitHub 的 Action 功能非常强大, 不仅能提供 Free 的多平台/架构/版本的云环境, 还能组合/结合各种不同 action 模块使用, 优点不言而喻. 不过随着功能的加强, 它的复杂性也不可避免的大幅增加, 有许多容易过时/摸不着头脑的设定需要了解, 官方文档作为第一参考没有问题, 这里主要是补充

内置变量

GitHub Action 内置了一些系统变量, 并不需要/也不允许用户自定义设置, 例如:

github.token

由于历史设定, 我们可以在官方建议的配置中看到几种写法, 初见可能很晕, 有以下几个

  1. GITHUB.TOKEN (全大写)
  2. github.token (全小写)
  3. ${{ secrets.GITHUB_TOKEN }} (完整/严谨引用)

注: secrets.*前缀基本代表你当前仓库的settings中配置的 k-v 对, 其中 GITHUB_ 前缀开头的是官方内置, 不允许用户使用相同前缀命名

那么很容易想到的下一个问题是 GITHUB.TOKEN 的权限是如何控制的呢, 例如我想让一个 action 运行完自动上传包到 github 仓库中

  1. 首先, 在每个 repo -> Settings -> Actions -> General -> Workflow permissions 中会有一个基本全局设置,
  2. 通过在每个 action 文件(yml) 的 permissions 变量参数中控制, 详见

Environments & Secrets & Variables

同样很容易让人配置时困扰的③兄弟, 经常傻傻分不清 image

首先 Secrets 大类最好理解, 它提供的 KV 对是加密的, 只有 action 可以读取它的 value, 但是日志无法显示(例如 echo), 会被自动加密

image

但是很快点进来又会发现有两个子类 (环境密钥 + 仓库密钥), 其中仓库密钥好理解就是指每个仓库自己的 kv 对, 你 action 中使用 secrets.xx 调用到这里的 KEY, 那么环境密钥(Env Secret)是啥呢?

缓存编译

由于容器环境的设定, 如果没有缓存存在, 每一次的编译/测试操作都需要重复下载大量文件, 可能会非常耗时, github 官方提供了一个通用的 action@cache 来对满足 k-v 对的常见语言进行包/文件缓存, 这里大体参考官方文档即可理解

但是类似使用 Make 编译 C++ 的项目, 该如何进行缓存就是一个很大的问题, 否则每次编译都朝得着半小时去 (注: 不可直接使用 CMake/XMake 等 action 进行套用)

独立服务器

默认 action 运行在 Github 的官方基础镜像/action 镜像上, 但它居然还允许运行在你指定的服务器/本机环境上, 这个配置在仓库的 repo -> Settings -> Actions -> Runners 中,

Clone this wiki locally