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と異なるためにエラーになるケースが有る)
といったあたりです。