在之前的文章《Github Actions使用》有介绍了Github Actions的使用方法。
之前是直接的 Github 官方提供的 runner,来执行。不过官方提供的 runner 多少还是有些限制。
这次我们来尝试将自己的 server 配置成 runner 来执行 actions。
关于添加自己的机器,可参考 Github 官方文档: https://docs.github.com/en/free-pro-team@latest/actions/hosting-your-own-runners/adding-self-hosted-runners
在 github 中 runner 分为三个级别: repository, organization, enterprise。
其中 repository 级别的 runner 就只能在这个代码仓库下使用;
organization 和 enterprise 级别的 runner 可以在这个 organization 或者 enterprise 下的所有代码仓库中共享。
由于我是免费用户,这里我就以 organization 为例吧。另外为了方便我们就直接通过 docker 来运行。
参考官方文档,首先进入到 organization 的 actions 设置页面,然后选择添加一个 runner。没有 organization 的可以自己创建一个。
接着在自己的 server 上执行命令:
1 | docker run -d \ |
其中 GH_REPOSITORY 就是设置页面上显示的 url 参数,GH_RUNNER_TOKEN 就是 token 参数。GH_RUNNER_LABELS 则根据自己的需要来为该 runner 设置标签。
至此,自己的 runner 就已经配置好了。不过这里我们是直接在这个 runerr 的 container 中操作 server 上的 docker 服务。这样其实是非常危险的,尤其是对于公有仓库来说。
为了安全起见,我们可以再运行一个 Docker-in-Docker 的服务,然后这个就只需要连接到该服务即可。
创建一个 docker-compose.yml 文件:
1 | version: "2" |
然后执行命令 docker-compose up -d
启动服务即可。
如果之后 actions 任务太多处理不过来,可以将 runner 扩容,多增加几个 runner 实例: docker-compose scale github-runner=3
至此,我们自己的 runner 就配置好了。如果想要在 actions 中使用我们自己的 runner,则需要修改之前的配置文件 .github/workflows/main.yml
。将 runs-on: ubuntu-latest
改为 runs-on: self-hosted
。