はじめに
以前大規模なデータベースの変更をした際、ローカル環境ではエラーが起きないのCircleCI上でのみエラーが発生する事象が発生しました。
最初はロガーを仕込んで検証していたのですが、都度コミットして確認ではとても非効率だったので何かいい方法がないか調べたところ、 CircleCIにはSSH を使用したデバッグができることを見つけてこれを使用して解決することができました。
今回は、CircleCI上のジョブコンテナにSSH接続を使用して直接コンテナ内で検証する方法について説明します。
手順
1. SSH接続を有効にする
問題が発生したジョブのページを開く
画面右上のRerunを開き、その中から "Rerun job with SSH" を選択
こちらを選択することで、SSH接続を有効な状態でジョブが再実行され、コンテナ内に直接アクセスしてデバッグを行うことが可能です。
SSH接続に必要な情報が表示されるので、その情報で接続する
ワークフロー一覧に "Enable SSH" というものが追加され、そこを開くと接続先の情報が表示されます。
GitHub または Bitbucket で使用しているSSHキーでSSH接続出来ます。
2. SSH接続の実行
ローカルターミナルを開き、CircleCIダッシュボードに表示されたSSHコマンドをコピーして実行します。
ssh -p <ポート番号> <ホスト>
接続が成功すると、CircleCIのコンテナ内にアクセスできるようになります。
3. エラーの検証
SSH接続が完了したらあとは手元の環境と同じように実行するだけです!
自分の場合は、CI環境上でのみDBを参照するテストが失敗していたので、 DBに接続してSQLを実行して問題のデータがどうなっているかを検証して解決しました。
3. SSH接続の無効化
基本的に時間経過で停止されるので手動でオフにする必要はありません。
有効時間は契約プランによって変わるようです。
ビルドされた仮想マシン (VM) は、ビルドの実行終了から 10 分間だけ SSH 接続で利用可能な状態になり、その後自動的にシャットダウンされます (キャンセルも可能です)。 ビルドに SSH 接続すると、Free プランのお客様は 1 時間、それ以外のプランのお客様は 2 時間接続が維持されます。
また、手動で終了させたい場合は、再度ジョブのページを開き"Rerun"から"Cancel job"で終了させることができます。
まとめ
CircleCI上でのエラー検証において、SSH接続を使用することで効率的にデバッグを行うことができるようになりました。
特に、ローカル環境では再現しない問題や、CI環境特有の設定ミスを確認・修正する際に有効です。
参考文献
さいごに
ホワイトプラスでは、ビジョンやバリューに共感していただけるエンジニアを募集しています! ネットクリーニングの「リネット」など「生活領域×テクノロジー」で事業を展開している会社です。 どんな会社か気になった方はオウンドメディア「ホワプラSTYLE」をぜひご覧ください。 オンラインでカジュアル面談もできますので、ぜひお気軽にお問い合わせください。