Travisでは最近、コンテナベースの環境がデフォルト環境として移行が進んでいます。
そして、その移行後の環境の制約として、before_scriptなどでsudo
コマンドが使えないというものが付きました。
弊社ではRailsのアプリをTravisでテストしてからデプロイを行なっていますが、これまでタイムゾーンの設定を以下のようにsudoコマンドに依存した形で設定していました。
.travis.ymlの抜粋
sudo: required
dist: precise
language: ruby
rvm:
- 2.3.4
bundler_args: "--without development staging production"
cache: bundler
addons:
postgresql: "9.3"
before_script:
- echo 'Asia/Tokyo' | sudo tee /etc/timezone
- sudo dpkg-reconfigure --frontend noninteractive tzdata
- psql -c 'create database travis_ci_test;' -U postgres
- cp config/database.yml.travis config/database.yml
ちなみに、sudo: required
とdist:precise
は移行後もsudoを使える以前の環境でビルドしたいときに設定するもので、これまではこの設定があるからsudo
を使っていても大丈夫でした。
しかし、そろそろコンテナベースの環境へ移行したかったので、以下のように変えました。
.travis.ymlの抜粋
sudo: false
language: ruby
rvm:
- 2.3.4
bundler_args: "--without development staging production"
cache: bundler
addons:
postgresql: "9.3"
before_script:
- export TZ=Asia/Tokyo
- psql -c 'create database travis_ci_test;' -U postgres
- cp config/database.yml.travis config/database.yml
ポイントは、sudo:false
を指定しているのと、
before_scriptのところで、以前はsudo
を使って
- echo 'Asia/Tokyo' | sudo tee /etc/timezone
- - sudo dpkg-reconfigure --frontend noninteractive tzdata
としていたのを
- export TZ=Asia/Tokyo
に変えたところですね。
意外とこの変更について日本語で記載している人がいない気がしたので記事を書いてみました。