CircleCIのビルド中におかしな挙動があったりした時に、SSH接続をして原因を探る仕組みがあるようです。
https://circleci.com/docs/ssh-build
その時に行った手順のメモ。
公開鍵を作成
Macならば、ターミナルから以下のコマンドを実行して、鍵を作成します。
ssh-keygen -t rsa -C "your_email@example.com"
基本的にはEnterを連打でOKです。(パスフレーズはなしにします)
出来上がったファイルは以下のとおり。
$ ls ~/.ssh/
id_rsa id_rsa.pub ...
今回できたid_rsa.pub
が公開鍵です。(無印は秘密鍵なので注意しましょう。)
Githubに公開鍵を登録
「 Setting -> SSH keys -> Add SSH key 」で先ほど作った公開鍵を登録します。(コピペ)
正しく設定された場合は、以下のコマンドを実行して確認します。
ssh -T git@github.com
初回アクセスの場合はいつものが表示されますが、その後に下記のように表示されたら成功です。
Hi username! You've successfully authenticated, but GitHub does not
provide shell access.
CircleCIのビルドをSSH付きで再実行
Githubに公開鍵を登録する前にビルドをしても、アクセスが有効になりません。(ハマりました)
ビルドの画面右上にある「 with ssh 」でビルドを再実行します。この時、ビルドが終わってから30分はデバッグのためにアクセスが有効になるようです。
ビルドが開始されたらSSHでアクセスする
ビルドの画面について「 Debug via SSH 」のタブを開くと、SSHの接続コマンドが表示されています。
例)
ssh -p xxxxx ubuntu@xx.xxx.xxx.xx
こちらのコマンドをコピペすればログインすることができます。
気になってたこと
そもそも、何でSSHアクセスしようとしていたかというと、gradle
のタスクの中で、gulp
の実行がコケてしまったことでした。
ですが、よく見ると、その前に実行しているnpm
やsass
やbower
は動いており、これはどういうことか?と気になったからでした。
結果としては、CircleCI
のコンテナにもろもろ標準で装備されていたらしく、PATHが通っていたために実行されていたというオチでした。
(ちなみにgulp
はありませんでしたがgrunt
は入ってました)