Travis CI を触っている中で扱うことになる、 Docker に関わる設定についていくつかメモ的に書きます。
.travis.yml に sudo : false
と設定すると docker container ベースで起動する
これは 2015 年くらいから各所でよく言われている travis tips だと思います。
以下の公式マニュアルにあるように、2015 年以降から .travis.yml に sudo : false
と設定すると docker container の上で CI が動作するようになります。これにより、CI が動作するまでのオーバーヘッドが短縮され、かわりに CI 中に sudo コマンドが使用できなくなります。
現在は、sudo
オプションを明示的に指定しない場合は、デフォルトでは sudo : false
扱いになるようです。
sudo: false default for repositories enabled in 2015 or later
結構多くの現場で、過去の設定例などを参考にしてか sudo : required
と指定しているケースをよく見かけますが、 sudo コマンドを発行する必要がなければ未指定にするか、 sudo : false
と指定する方が無難です。
個人的なヒューリスティックな感想だと、CI の開始までの時間が、少なく見積もっても数分は短縮されるように思えます。
なお、正直 sudo : false
指定で docker container 起動となる、というのはかなり直感的ではないと個人的には感じますが、、 travis の設定にはこういう個所が複数あるように見え、個人的には諦観を以って接しています。
CI 中に docker サービスを起動する
以下の公式ドキュメント中にある docker についての解説に従い、 services
で docker
を指定すると、docker サービスが CI 上で起動されます。
sudo: required
services:
- docker
services で指定すると、travis 内部では sudo service docker start
が呼び出されるためか、sudo : false
と指定していても自動的に sudo : required
扱いになります。
ですのでこの方法だと CI 開始までのオーバーヘッドが少しかかってしまうことに留意してください。
Travis CI automatically routes builds to run on Trusty sudo: required when services: docker is configured.
なお、2017年5月5日現在では、 標準の travis 環境 (trusty 14.04) にあらかじめ含まれている docker のバージョンは 1.12.3
のようです。
$ docker --version
Docker version 1.12.3, build 6b644ec
これを最新のものに更新したい場合は、 before_install
などで明示的に apt-get
を呼び出す必要があります。
before_install:
- sudo apt-get update
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-engine
local の docker 環境を用いて travis ci の debug を行う
travis は標準で docker image を提供しているので、こちらを用いて travis の local debug を行う事ができます。
ただし、 .travis.yml
をそのまま実行する、というようなオプションは提供されていないので、出来ることとしては docker image 上で .travis.yml に書いたようなコマンドが正しく動作するか、の確認までになります。(工夫次第でやりようはあるかもしれませんが)
$ docker run --name travis-debug -dit quay.io/travisci/travis-ruby /sbin/init
$ docker exec -it travis-debug bash -l
# su - travis
といったような形で local 環境の docker で travis のイメージを起動し、ログインすることが出来るようになります。
あとは、.travis.yml に記述した内容を、コマンドとして実行して正しく動くか試す、という感じです。