debuggeraction 更新 v2 版支持 ngrok

1. 什么是 Ngrok

Ngrok 是一个内网穿透工具,能够将内网的服务,发布到公网上。下面这张图,可以很好地展示其功能:相较于同类工具 Frp (需要同时运行 Server 和 Client ),Ngrok 将内网穿透做成了一个服务。只需要在 Ngrok 注册账户,获得 Authtoken ,启动 Client 就可以对外提供,本地服务的公网地址。使用方式非常地简单,三步走:

  • 解压 Ngrok 文件
  • 1
    
    unzip /path/to/ngrok.zip
    
  • 授权
  • 1
    
    ./ngrok authtoken xxxxxxxxxx
    
  • 暴露服务
  • 1
    
    ./ngrok tcp 22
    

    这样就可以得到一个可以在公网直接访问的地址,例如: 4.tcp.ngrok.io:18848

    2. 什么是 debugger-action

    在之前的文章《GitHub Actions 在线调试工具:debugger-action》中,给大家介绍了一个 GitHub Actions 的调试工具,允许开发者将 Runner 保持在线,从而远程 SSH 登陆进行调试。在 shaowenchen/[email protected] 中,调试依赖于 Frp Server 服务,示例如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    - uses: shaowenchen/[email protected]
      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/[email protected] 中,对 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/[email protected]
      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/[email protected]
            name: debugger
            timeout-minutes: 30
            continue-on-error: true
            with:
              ngrok_token: ${{ secrets.NGROK_TOKEN }}
    

    3.4 远程登陆进行调试

    由于上一步设置的是 workflow_dispatch ,因此需要手动触发流程。在 GitHub Actions 的日志中可以找到 Ngrok 输出的访问地址,如下图:使用 SSH 进行登录:

    1
    
    ssh [email protected] -p 10815
    

    输入密码: 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. 参考

    • https://github.com/marketplace/actions/a-debugger-for-actions
    • https://github.com/shaowenchen/debugger-action