HPCメモ

HPC(High Performance Computing)に関連したりしなかったりすることのメモ書き

travisCIでdockerを使ってsshクライアントのテストをする

node.js用のsshライブラリ(のラッパーライブラリ)を開発していて、こちらの方と全く同じ問題にぶつかりました。

kohkimakimoto.hatenablog.com

こちらの記事では、travisCIのテストが動いている環境でsshdを立ててアクセスしていますが、ローカルのテストで使いまわす時のことを考えて、dockerでsshdを立ち上げてそちらへアクセスするようにしてみました。

travisCIのテスト中にdockerを使う方法についてはこちら

docs.travis-ci.com

このドキュメントでは、dockerhubに公開されたイメージをbuildする前提で書かれていますが、Dockerfileをテスト対象コードのリポジトリに含めてそれを使う方針でやります。

まず、次のようなDockerfileを用意します。ここではcentOSのオフィシャルイメージを使っていますが、その辺はお好みで。

FROM centos:centos7
EXPOSE 22

# install sshd package
RUN yum -y install openssh-server initscripts

# generate hostkey
RUN /usr/sbin/sshd-keygen

# add non-root user and set password
RUN adduser testuser && echo "passw0rd" | passwd --stdin testuser
RUN mkdir -p /home/testuser/.ssh && chown testuser:testuser  /home/testuser/.ssh

CMD ["/usr/sbin/sshd", "-D"]

これをリポジトリ内の、testディレクトリに保存します。

続いて、.travis.ymlに次の記述を追加します。

services:
- docker
before_script:
- docker  build -t sshd ./test
- docker run -p 4567:22 -d sshd

docker buildの行で./testと書いているところは、実際にはDockerfileを配置したディレクトリを指定します。あと最後のdocker runの時に-dをつけてバックグラウンドに回すのをお忘れなく。