GitHub Actions で CircleCI のように SSHデバッグ をする方法

結論

"Debugging with tmate" を使う。

github.com

使い方

使い方は公式ドキュメントに詳しく書かれています。

mxschmitt.github.io

以下の画像のような感じで SSH の接続情報が表示されるので、コピペして ssh コマンド を実行すればログインできます*1

gyazo.com

実際にどう書くか

実際には以下の内容を追記すればいいと思います。

1. on: の箇所に workflow_dispatch: を書く

workflow_dispatch を指定することで、手動発火を契機に SSH接続 をすることができるようになります*2

2. Step に以下を追加する

Step として以下を追記します。追記する場所で CI の実行が止まるので、差し込む場所は適宜考慮します。if: の部分も適宜変更します。

    - name: Setup tmate session
      uses: mxschmitt/action-tmate@v3
      if: ${{ github.event_name == 'workflow_dispatch' }}
      timeout-minutes: 15
      with:
        sudo: true
        limit-access-to-actor: true

実際にどう実行するか

上記の内容を追記したならば Actions のメニューに入ってからアクションを選択した際に、dispatch 用の実行ボタンが表示されているはずです。Run workflow ボタンを押して実行します。

gyazo.com

その後、前述したように SSH の接続情報が表示されるので、それを用いてログインします。

各種カスタマイズなど

以下の点がカスタマイズ項目になります。詳しくは公式ドキュメントを参照してください。

  • 他に workflow_dispatch がある場合には、Debugging with tmate の実行の際に特定の引数を与えることで分岐を制御する
  • timeout-minutes
  • with: sudo: (true|false)
    • CI 実行時に permission で怒られる場合にはここをいじる
  • limit-access-to-actor
    • GitHub に登録してある公開鍵に対応する鍵で SSH する

セキュリティ

tmate.io を経るため、実際のプロダクトで使えるかと言われると難しいかもしれません。公式で SSHデバッグ の方法を用意してほしいです。

参考

zenn.dev

*1:デフォルトでは認証は不要

*2:CircleCI と似たようなことができる

Powered by はてなブログ