本当は怖い情報科学

とあるHPC屋の趣味&実益ブログ

Travis CIのテストをローカルで走らせる

Travis CIは、Githubリポジトリにあるコードの継続的インテグレーションをサポートしてくれるツールです。 公開リポジトリであれば無料で利用できるため、プロジェクトで利用されていると思います。

.travis.yml というファイルをリポジトリに置くことによって Travis CIの挙動を制御することができますが、テスト動作をテストするためにはリポジトリへ push を行う必要があるため、 細かい挙動の調整を繰り返し行うのは時間のかかる作業です。

そこで、loci というソフトウェアを使って、ローカルにセットアップしたVagrantとDockerを使って Travis CIの挙動をローカルで再現する環境を作ってみました。

全体の構成

今回は、私の作業環境であるMacbook上での作業です。その上にVagrantを使ってUbuntuの仮想環境を構築し、その仮想環境の中でさらにDockerを動かしてTravis相当のCIを走らせます。

VagrantとDockerを設定する

まず、Virtualboxを用いてVagrant環境を構築します。Virtualbox, Vagrantが何かということと、それらのインストール方法は他に譲ります。

まず、Travis CIのコンテナ環境と同じUbuntu Trustyのboxイメージをダウンロードしてきます。適当な場所に作業ディレクトリを作って作業します

$ vagrant box add travis https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

次に、その boxを使って仮想マシンを作成します

$ vagrant init ubuntu/trusty64

# Vagrantの仮想マシンにログイン
$ vagrant ssh

Go言語とLociの導入

作成した仮想マシン上にGo言語の環境を構築してからLockをインストールします。Go言語の1.7以降が必要ですが、Ubuntuのパッケージに含まれているのは古いバージョンなので、手動で導入することにします。下記のWebサイトに従ってインストールを行いました。

How to Install Go 1.8 on Ubuntu 16.04 & 14.04 | TecAdmin

ここでは、Go言語自体のインストールパスを GOROOT 、goプログラムのパスを GOPATHとしています。

次に、仮想マシン上にLociをインストールします。これは、githubの説明に従って go get を走らせるだけです。

$ go get github.com/jkawamoto/lock

動作を確認しておきましょう。

$ ${GOPATH}/bin/lock --version
Loci version 0.5.2

Dockerの導入

UbuntuのパッケージにあるDockerではなく、Docker-CEを自分で導入します。

Get Docker CE for Ubuntu | Docker Documentation

起動用シェルスクリプトの構築

以下のように起動スクリプトを作成しました。VagrantをインストールしたディレクトリをVAGRANT_PATHとして、以下のように起動します。また、VAGRANT_PATHの1つ上のディレクトリがプロジェクトのディレクトリであることを仮定しています。

$ env VAGRANT_PATH=~/.mpienv/vagrant bash run-local-travis.sh

ポイントとしては、

  • vagrant sshでSSHの設定を取り出してSSH接続をおこなうこと
  • DOCKER_API_VERSION変数を設定すること
  • Dockerの構築に使うイメージをubuntu/trustyにすること(Lociのデフォルトだと Ubuntu 16を使おうとするので、パッケージ等がTravisと異なるためにエラーになるケースが有る)

といったあたりです。

gist.github.com

【広告】