SSH接続を利用してCircleCI上のコンテナをデバッグする方法
なぜSSHを利用してデバッグしたいのか?
以下のような場合はローカル環境でのデバッグではなく、SSHを利用してCircleCIコンテナを直接デバッグすると手間が省けます。
- OSやタイムゾーンの違いなど、ローカル環境とCI環境の差異によって生じるエラーなどを再現・解決したい。
- CircleCIのビルドコンテナ上の環境変数が正しく設定できているか確認したい。
SSH鍵をバージョン管理システムに追加する
まず前準備として、SSH鍵を利用しているバージョン管理システム(GitHubもしくはBitbucket)に追加します。
新しいSSH鍵の作成
ここではGitHubの例を示します。
まず以下のコマンドを任意のターミナルから実行します。
$ ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-agentを開始します。
$ eval "$(ssh-agent -s)"
> Agent pid 59566
ssh-agentに鍵を渡します。
$ ssh-add -K ~/.ssh/id_ed25519
詳しくは新しい SSH キーを生成して ssh-agent に追加するをご確認ください。
作成したSSH鍵をバージョン管理システムに追加する
公開鍵情報をコピーします。
$ pbcopy < ~/.ssh/id_ed25519.pub
GitHubに先ほどコピーした鍵情報を入力して保存します。
最後に、ターミナルから以下のコマンドを入力して成功した旨のメッセージが返されることを確認してください。
❯ ssh git@github.com
Hi :username! You've successfully authenticated...
詳しくはGitHub アカウントへの新しい SSH キーの追加をご確認ください。
デバッグ手順
Return Job With SSHを実行する
実際にSSHでログインしたいビルドジョブの画面から「Return Job With SSH」を選択します。
すると、「Enable SSH」欄内にこのビルドジョブにアクセスできるSSHコマンドが出力されます。
ターミナルで実行する
前項で出力されたSSHコマンドを任意のターミナルから実際に実行します。
今回利用したコンテナイメージはubuntu系だった為、ユーザー名はroot@xxxとなっています。
そうではなく、例えばコンテナがCircleCIのビルド済みDockerイメージの場合はcircleci@xxxのように表示されますが、いずれの場合も正しくアクセスできています。
接続に成功すると、その旨が「Enable SSH」欄に表記されます
参考
SSH を使用したデバッグ
CircleCI実践入門──CI/CDがもたらす開発速度と品質の両立 (WEB+DB PRESS plus)