Travis CI のOS 仮想環境を手元のDocker で実行する


travis-ci コンテナをlocal のDocker コンテナとして起動する

travis-ci でテストを実施する場合、travis-ci のOS コマンドを発行したりファイルにデータを直に書き込むようなテストケースがあった場合、事前にtravis-ci の仮想環境にログインして用意されているコマンドやディレクトリ構成を調べたいと思ったことはないでしょうか?
Travis CI ではそういった時にTravis CI のテスト環境と同等な環境をDocker コンテナとして実行する方法が用意されています。

ここではtravis-ci 環境のdocker コンテナを手元で起動してnodejs のテストを実行するまでの手順をご紹介します。

Docker イメージを選択する

travis-ci ではDocker Hub にtravis-ci のコンテナをプログラミング言語毎に公開しています。
公開されているDocker イメージは以下のものがあります。

  • travis-ci 公開イメージ一覧
    プログラミング言語 Docker Hub イメージ
    android travisci/ci-amethyst:packer-1512508255-986baf0
    erlang travisci/ci-amethyst:packer-1512508255-986baf0
    haskell travisci/ci-amethyst:packer-1512508255-986baf0
    perl travisci/ci-amethyst:packer-1512508255-986baf0
    default travisci/ci-garnet:packer-1512502276-986baf0
    go travisci/ci-garnet:packer-1512502276-986baf0
    jvm travisci/ci-garnet:packer-1512502276-986baf0
    node_js travisci/ci-garnet:packer-1512502276-986baf0
    php travisci/ci-garnet:packer-1512502276-986baf0
    python travisci/ci-garnet:packer-1512502276-986baf0
    ruby travisci/ci-garnet:packer-1512502276-986baf0

最新の情報についてはtravis-ci のサイトにあるので、そちらを参考にしてください。
- https://docs.travis-ci.com/user/common-build-problems/#Running-a-Container-Based-Docker-Image-Locally

今回はnode_js のイメージを使用してログイン、構築してテスト実行までを行ってみます。

travis-ci のnodejs 用コンテナを起動する

上記のリストからnodejs 用のイメージはtravisci/ci-garnet:packer-1512502276-986baf0 になります。
それをpull して構築していきます。

travis-ciイメージのpullとコンテナの起動、ログイン
# IMAGE="travisci/ci-garnet:packer-1512502276-986baf0"
# docker run --name travis-debug -dit $IMAGE /sbin/init
# docker exec -it travis-debug bash -l

コンテナにログインしたらtravis ユーザに変更します。

travisユーザへ変更
# su - travis

ひとまずはこれでtravis のOS 仮想環境の構築は完了で、一通りの環境変数やディレクトリ構成を確認することができるようになっています。
次はnodejs のテスト環境を構築して実際に実行するまでを行ってみます。

nodejs テスト環境の構築

テスト環境を構築するために現行ではruby 2.3.0 が必要みたいで、そのruby 環境を構築していきます。

ruby環境の準備
$ ruby --version
$ rvm install 2.3.0
$ rvm use 2.3.0 --default
$ cd ~/builds
$ git clone https://github.com/travis-ci/travis-build.git
$ cd travis-build
$ mkdir -p ~/.travis
$ ln -s $(pwd) ~/.travis/travis-build
$ bundle install
$ bundler add travis
$ # cd ~/builds/travis-build
$ bundler binstubs travis

テスト対象リポジトリのclone とテスト用スクリプトを作成します。
今回はリポジトリhttps://github.com/TsutomuNakamura/rpncc.git をclone してテスト実行してみます。

テスト対象リポジトリのcloneとテストスクリプトの作成
$ cd ~/builds
$ git clone https://github.com/TsutomuNakamura/rpncc.git
$ cd rpncc
$ ~/.travis/travis-build/bin/travis compile --no-interactive > ci.sh

テストスクリプトを作成したら、テスト対象のブランチをci.sh に書き込みます。
今回はmaster ブランチをテストしてみます。

masterブランチをテスト対象にする
$ sed -i "s/branch.*https/branch\\\=\\\'master\\\'\\\ https/g" ci.sh

ci.sh を実行してテストを走らせます。

テスト実行
$ bash ci.sh

テストが無事実行できました!

参考