如何在自己电脑中搭建Runners,以便于让Github Actions来调用?个人觉得很有意义的东西,但是网上相关介绍很少,看来要么是太简单了,要么是不实用
先准备两台主机,一台Windows10,一台Ubuntu22.04,不需要公网IP(Runner主动连接GitHub,所以主机在NAT内部,没有公网IP是没问题的)。
按文档走
官方有详细文档 Adding self-hosted runners - GitHub Docs ,只需要照着走一遍...
创建仓库
创建一个 private 仓库(public仓库会暴露个人搭建的 Runner,不安全)
仓库名:dbzhang800/test-self-hosted-runner
设置仓库
依次点击:
1 |
|
在这儿,可以选择Runner运行的系统:
- macOS
- Linux
- Windows
选中后,它在页面上会给出对应平台所需要的操作指令(很详细,照做即可),主要做两件事情:
- 下载并解压 Runner 程序: actions-runner-xxxx.tar.gz
- 解压后执行config脚本
Ubuntu下安装配置Runner
手边是台Ubuntu22.04主机,先用它试试看。
按Github给出的指令,逐条输入。
首先,下载当前最新版的actions-runner-xxxx.tar.gz程序,并解压
1 2 3 |
|
然后,执行config脚本进行配置
1 |
|
配置过程中,它会连接到GitHub,并会提示输入Runner group名字(默认即可),Runner名字(我叫它db-ubuntu2204),工作文件夹名字(默认
_work
)。
配置完成后,在仓库的Setttings中即可看到自己的Runner,如下图所示(Offline状态):
要激活它,只需要运行如下命令(变为Idle状态):
1 |
|
Windows下安装配置Runner
流程和上面一样,按官方建议,使用管理员权限,并将目录设置为C:\actions-runner。
配置过程中,它会连接到GitHub,并会提示输入Runner group名字(默认即可),Runner名字(我叫它db-windows10),工作文件夹名字(默认
_work
)。
配置完成后,在仓库的Setttings中即可看到自己的Runner,如下图所示(Offline状态):
执行如下命令,激活它
1 |
|
测试
在Github后台,可以看到Runner处于Idle状态,在Runner控制台,可以看到如下输出
1 |
|
表明Runner配置成功。要证明其工作,还是需要在仓库中添加workflow....
workflow使用自己的Runner(Ubuntu)
在开始创建的仓库中,添加workflow文件:.github/workflows/self-hosted-ubuntu.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
考虑到连接Github速度实在太慢,只试试代码拉取,并执行系统python的命令。
我的Windows和Linux上都安装有Python3.x,且在环境变量PATH中。
测试结果
网速还是太感人了,连一个actions都没下载成功:
1 |
|
不管怎样,流程反正是通了。看来在国内也只能做这种demo了,没有使用性。要跑完流程,看来需要找台国外的主机试试...
不过反复尝试三次,Linux下面总算跑通一次 。
workflow使用自己的Runner(Windows)
同Linux下一样,创建一个使用与Windows下runner的workflow文件:.github/workflows/self-hosted-ubuntu.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
权限问题
上面的workflow遇到如下权限问题:
1 2 3 4 5 6 7 8 9 10 |
|
因为runner运行在Windows10上面,而不是Windows Server上,二者默认的执行策略不同。
- Restricted(适用于 Windows 客户端)。
- RemoteSigned(适用于 Windows 服务器)。
解决方案:在PowerShell中执行
1 |
|
作用:允许本地运行未签名的脚本,但是通过网络传输的脚本必须经过数字签名。
demo完成
最终结果如下:
参考
- Adding self-hosted runners - GitHub Docs
- https://jessicadeen.com/posts/2020/github-actions-self-hosted-runner/
- Which IPs do I need to allow for a self-hosted runner? · community · Discussion #25107 (github.com)