Travis CIのビルド環境はコンテナベースと仮想マシンベースのものがあったが、現在は仮想マシンベースに統一された -`sudo: false` はもういらないよ-

Travis CIとDocker関係で調べることがあり以下の2つのポストを読んだ。

[The Travis CI Blog: Combining The Linux Infrastructures](https://blog.travis-ci.com/2018-10-04-combining-linux-infrastructures)

[The Travis CI Blog: Upcoming Required Linux Infrastructure Migration](https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration)

2018年12月7日から、Linuxビルド環境を使用する全プロジェクトが、仮想マシンでビルドを実行する同一Linuxインフラストラクチャーを使用するように完全にマイグレーションされたらしい。(以下の英語の引用から意訳)

> 07 December, 2018 - All projects that use a Linux build environment will be fully migrated to using the same Linux infrastructure, which runs builds in virtual-machines.

引用元 
[The Travis CI Blog: Upcoming Required Linux Infrastructure Migration](https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration)

ちなみに筆者は年明けからTravis CIを使い始めた。それまではCircle CIを使用していたので、どうやら仮想マシンでのビルドしか体験していないようだ。

# これまでのTravis CIのビルド環境
これまでTravis CIのビルド環境は、コンテナベースのものと仮想マシンベースのものが存在した。
コンテナベースの方がビルド時間を短縮できるということで、 `travis.yml` に `sudo: false` と記述してコンテナベースでの実行を設定していた方も多いと思う。(`travis.yml` に `sudo: false` と記述することでコンテナベースでの実行が可能だった)

参考
[Travis CIでコンテナベースのインフラストラクチャとDockerでより高速なビルドを | POSTD](https://postd.cc/faster-builds-with-container-based-infrastructure/)

[TravisCIでコンテナベースの環境を利用するまでにやったsudo廃止作業 - Qiita](https://qiita.com/oh_rusty_nail/items/342eef460b55d88d6be3)

# Travis CIのLinuxインフラストラクチャの変更
これまで存在したコンテナベースのものと仮想マシンベースのビルド環境を仮想マシンベースのビルド環境に統一する。

[公式](https://docs.travis-ci.com/user/reference/overview/)にも、`Container-based environment` が `Deprecated Virtualization Environments` として記載されている。

> Deprecated Virtualization Environments #
Historically, Travis CI has provided the following virtualization environments.

> Trusty Container-based environment: was available between July, 2017 and December, 2018.
Precise Container-based environment: was available between December, 2014 and September, 2017.
Legacy Linux environment: was available until December, 2015.


引用元
[Build Environment Overview - Travis CI](https://docs.travis-ci.com/user/reference/overview/)


# 変更に伴い生じる嬉しいこと
[公式のポスト](https://blog.travis-ci.com/2018-10-04-combining-linux-infrastructures)を簡単にまとめると変更に伴い以下のような嬉しいことがあるそうだ。

- ビルド環境が統一化されるので、コンテナベースと仮想マシンベースで設定を分けなくて良くなり、設定におけるユーザーエクスペリエンスが向上する
- セキュリティの問題からコンテナー内で大幅に特権が削除されていたが、それが修正される
    - 以前はセキュリティの問題でコンテナの場合は `sudo: false` で `sudo` 使えなくしなければならなかったのかなと思う(これはあくまでも予想だけど)

参考
[The Travis CI Blog: Combining The Linux Infrastructures](https://blog.travis-ci.com/2018-10-04-combining-linux-infrastructures)

# `sudo: false` は消した方が良さそう
公式のポストでも以下のような記述があるので `sudo: false` は消した方が良さそう

> If you currently specify sudo: false in your .travis.yml, we recommend removing that configuration soon.

引用元
[The Travis CI Blog: Upcoming Required Linux Infrastructure Migration](https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration)

# 実際にこの変更を感じた出来事
以前は、 `sudo: false` がデフォルトになってしまうようだったので、https://github.com/ory/dockertest をTravisCIで使用するには、以下のような設定を 
`travis.yml` に追記する必要があったようだ。(以前のREADMEに記載されていた。)

```yml

sudo: required

services:
  - docker
```

しかし、仮想マシンベースに統一された現在は上記のような変更を行わなくてもよくなったようだ。
実際に上記の記述を外しても、ちゃんとCIは通る。

Travis上で https://github.com/ory/dockertest を使っている人が余計な設定をしてしまうのはよくないなと思ったので、[READMEからtravis.ymlの設定を削除するPR](https://github.com/ory/dockertest/pull/155)を送ってみたらmergeしてもらえた!

# 参考にさせていただいたサイト

[The Travis CI Blog: Combining The Linux Infrastructures](https://blog.travis-ci.com/2018-10-04-combining-linux-infrastructures)

[The Travis CI Blog: Upcoming Required Linux Infrastructure Migration](https://blog.travis-ci.com/2018-11-19-required-linux-infrastructure-migration)

[Travis CIでコンテナベースのインフラストラクチャとDockerでより高速なビルドを | POSTD](https://postd.cc/faster-builds-with-container-based-infrastructure/)

[TravisCIでコンテナベースの環境を利用するまでにやったsudo廃止作業 - Qiita](https://qiita.com/oh_rusty_nail/items/342eef460b55d88d6be3)

https://github.com/ory/dockertest