离线环境使用github-actions

gitea 离线使用 github-actions

简介

github-actions 在国内环境不太好用;

私有化环境一般使用 gitea, 搭配 act_runner 来使用, 兼容 github-actions;

离线环境如何使用呢?

尝试过的方案

AI 给出过一些错误的案例, 经验证没有成功

  1. uses: /local/actions/checkout@v6 本地路径方式,实际是错误的
  2. 各自 env 方式映射到本地路径,验证无效
  3. 拷贝 $HOME/.cache/act 缓存的方式, 验证了一半没有成功,理论上应该是可以的;
  4. 将 github 的相关actiions镜像到本地仓库, 可行;但是不能这样做
    • 要镜像太多库,麻烦
    • 如果放在本地, 这个库必须是要能免认证就可见的, 企业场景不允许
    • 如果单独在拉取时附带一个token, 则语法上就不好看, 就不兼容外网版本的workflows;

gitea使用 actions 的事项

  1. 默认会去 github 下载
  2. 可以使用 https://xxx.com/actions/checkout@v6 的方式指定库
  3. 如果开启 DEFAULT_ACTIONS_URL = self 配置, 则在无域名路径时, 默认去当前的git仓库下载actions
  4. 除非使用 uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd 哈希的方式, 否则每次都需要联网确认tag或分支的具体的hash

最终方案

还是在底层解决,网络代理的方式

1
2
3
4
5
6
7
# 允许 act_runner 时附加代理
# 可以连接局域网内的可访问github的socket5相关端口
# 注意一定要使用 NO_PROXY 排除掉自身域名
export HTTPS_PROXY=http://127.0.0.1:1081
export HTTP_PROXY=http://127.0.0.1:1081
export ALL_PROXY=socks5://127.0.0.1:1080
export NO_PROXY=localhost,192.168.5.0/24,127.0.0.0/8,services.wait

如果后续要完全离线使用, 则将相关的 workflows 都运行一次,当 actions 下载过一次后,后续就不需要再连github, 也不需要再配置代理了,当然actions版本的位置必须使用 hash 才行;

如果跨网络目标主机不能访问代理时,可以通过 ssh 反向代理到本地

1
2
# socket5 反向隧道
ssh -R 1080 -N -f ubuntu@192.168.5.110 -i id_ed25519

完全离线场景, 且不能使用代理时

从已经有的主机上拷贝 $HOME/.cache/act 缓存, 必须配合 uses: actions/checkout@de0facxxxxx 的方式使用。

Licensed under CC BY-NC-SA 4.0
转载或引用本文时请遵守许可协议,知会作者并注明出处
不得用于商业用途!
最后更新于 2025-08-20 00:00 UTC