1. 什么是 Ngrok
Ngrok 是一个内网穿透工具,能够将内网的服务,发布到公网上。下面这张图,可以很好地展示其功能:
相较于同类工具 Frp (需要同时运行 Server 和 Client ),Ngrok 将内网穿透做成了一个服务。只需要在 Ngrok 注册账户,获得 Authtoken ,启动 Client 就可以对外提供,本地服务的公网地址。
使用方式非常地简单,三步走:
- 解压 Ngrok 文件
1
| unzip /path/to/ngrok.zip
|
- 授权
1
| ./ngrok authtoken xxxxxxxxxx
|
- 暴露服务
这样就可以得到一个可以在公网直接访问的地址,例如: 4.tcp.ngrok.io:18848
2. 什么是 debugger-action
在之前的文章《GitHub Actions 在线调试工具:debugger-action》中,给大家介绍了一个 GitHub Actions 的调试工具,允许开发者将 Runner 保持在线,从而远程 SSH 登陆进行调试。
在 shaowenchen/debugger-actions@v1
中,调试依赖于 Frp Server 服务,示例如下:
1
2
3
4
5
6
7
8
9
| - uses: shaowenchen/debugger-action@v1
name: debugger
timeout-minutes: 30
continue-on-error: true
with:
frp_server_addr: ${{ secrets.FRP_SERVER_ADDR }}
frp_server_port: ${{ secrets.FRP_SERVER_PORT }}
frp_token: ${{ secrets.FRP_TOKEN }}
ssh_port: ${{ secrets.SSH_PORT }}
|
这对开发者不够友好。了解到 Ngrok 可以提供免费的穿透服务之后,我在 shaowenchen/debugger-actions@v2
中,对 Ngrok 进行了支持。在 v2 中,同样支持 Frp 。
下面一起来看看,怎么使用 Ngrok 进行 GitHub Actions 调试吧。
3. 在 debugger-action 上使用 Ngrok 进行进行调试
3.1 登陆 Ngrok 官网,获取 Authtoken
访问 Ngrok 官网,https://dashboard.ngrok.com/ , 可以使用 GitHub 或者 Google 账户登陆。
进入 Authentication 页面,找到自己的 Authtoken,如下图:
3.2 在 GitHub 项目下,配置 Secrets
在项目的 Settings 页面中,新增 Secrets,如下图:
将 NGROK_TOKEN
设置为上一步中获取到的 Authtoken 。
3.3 在项目中,添加 debugger-action
在需要断点调试的 Workflows 中,添加如下 debugger-actions 片段:
1
2
3
4
5
6
| - uses: shaowenchen/debugger-action@v2
name: debugger
timeout-minutes: 30
continue-on-error: true
with:
ngrok_token: ${{ secrets.NGROK_TOKEN }}
|
这里给出一个 Kind 环境的完整示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| name: example-ngrok-kind-v2
on:
workflow_dispatch:
jobs:
example-ngrok-kind-v2:
runs-on: ubuntu-latest
steps:
- name: Creating kind cluster
uses: helm/[email protected]
- uses: shaowenchen/debugger-action@v2
name: debugger
timeout-minutes: 30
continue-on-error: true
with:
ngrok_token: ${{ secrets.NGROK_TOKEN }}
|
3.4 远程登陆进行调试
由于上一步设置的是 workflow_dispatch
,因此需要手动触发流程。
在 GitHub Actions 的日志中可以找到 Ngrok 输出的访问地址,如下图:
使用 SSH 进行登录:
输入密码: root
然后就可以在 Runner 上愉快地进行调试了。
1
2
3
4
5
6
7
8
9
10
11
12
| kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6955765f44-cknkh 1/1 Running 0 2m35s
kube-system coredns-6955765f44-crx27 1/1 Running 0 2m35s
kube-system etcd-chart-testing-control-plane 1/1 Running 0 2m51s
kube-system kindnet-l2sjw 1/1 Running 0 2m35s
kube-system kube-apiserver-chart-testing-control-plane 1/1 Running 0 2m51s
kube-system kube-controller-manager-chart-testing-control-plane 1/1 Running 0 2m51s
kube-system kube-proxy-td9jg 1/1 Running 0 2m35s
kube-system kube-scheduler-chart-testing-control-plane 1/1 Running 0 2m52s
local-path-storage local-path-provisioner-7745554f7f-qf6n8 1/1 Running 0 2m35s
|
4. 参考