概要
CircleCIにはビルドが失敗した際のデバッグ手段としてRerun Job with SSH
が提供されてます。
これを押すとEnable SSH
というステップが挟まれ、そこに書いてあるsshコマンドをターミナルで実行することでCircleCIで実行中のジョブ内に入ることができます。
ただその中でいくつかハマった点があるので対処法とともにまとめます。
環境
- CircleCI 2.1
- circleci/golang:1.17
ハマったこと
go: command not found
circleci/golang:1.17というimageにsshしているはずなのに、goコマンドがないと怒られます。
root@xxx:~# go version
-bash: go: command not found
root@xxx:~# which go
root@xxx:~#
ローカルでは--login
を付けることで再現できます。
$ docker run -it circleci/golang:1.17 /bin/bash --login circleci@2508ab566e1c:/go$ go version bash: go: command not found
対処方法
goバイナリが置いてあるディレクトリをPATHに追加します。
デフォルトではPATHは以下ですが、
root@xxx:~# echo $PATH /root/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
goバイナリは/usr/local/go/bin
にありました。
なので以下のコマンドでPATHを通すことで使えるようになります。
root@xxx:~# export PATH=/usr/local/go/bin:$PATH root@xxx:~# go version go version go1.17.5 linux/amd64
tabやbackspaceが効かない
tab補完が効かなかったり、backspaceで削除しようとしてもカーソルが前に進むだけで消えないという状態です。
これはsshの時にローカルのTERM
環境変数の値を渡して変な状態になっていることで発生しました。
root@xxx:~# echo $TERM tmux-256color
対処方法
なのでsshしているシェルの中で
root@xxx:~# export TERM=xterm
とするか、そもそもsshする際にTERMをxtermに設定するよう.bashrc
にaliasを貼ります。
alias ssh='TERM=xterm ssh'
参考
- PATH not being set correctly when SSH'ing in to circleci/android:api-28-ndk · Issue #470 · circleci/circleci-images · GitHub
- linux - Backspace, Tab not working in terminal (using ssh) - Unix & Linux Stack Exchange
- terminal - Prevent SSH client passing TERM environment variable to server? - Unix & Linux Stack Exchange