LoginSignup
17
11

More than 5 years have passed since last update.

TravisCIでコンテナベースの環境を利用するまでにやったsudo廃止作業

Posted at

はじめに

  • .travis.ymlにsudo: falseと書けばコンテナベースの環境を利用できるようになり、ビルド時間が短縮されるということをご存知でしょうか?
  • 関連する記事はたくさんあり、ググるとsudo: falseと書くだけですと
  • ところが何でも書けちゃう.travis.ymlには sudo を既にたくさん書いているなんてことはないでしょうか
    • sudo廃止のためにやったことをここに書いていきます
  • 記事を書いていて気付いたのですが、TravisCIの公式ドキュメントを隅から隅まで読んでいれば、そもそもこの問題にぶち当たることもないと思われますw
    • なぜなら、ほとんど正解はそこにあるから!というよりそこに書いていなければ「それはデキナイ」ことかもしれない
  • ですが、隅から隅まで読むなんて・・・という方は参考にしてみてください
  • そして、他にもこんなこと対応しました!などあれば編集リクエストなりコメントください。お待ちしております^^

何でコンテナベースを利用したいのか

[ 対応1 ] sudoを使わずにapt-get install

変更前

.travis.yml
before_install:
    - sudo apt-get update -qq
    - sudo apt-get install -qq [packages list]

変更後

.travis.yml
addons:
  apt:
    packages:
    - [package1]
    - [package2]

[ 対応2 ] sudoを使わずにpip installする

変更前

  • まずは、単純に付けていたsudoを取ってみる。すると以下のように怒られる
$ pip install [package]
  Exception:
  Traceback (most recent call last):
    File "/usr/local/lib/python2.7/dist-packages/pip-6.0.7-py2.7.egg/pip/basecommand.py", line 232, in main
      status = self.run(options, args)
    File "/usr/local/lib/python2.7/dist-packages/pip-6.0.7-py2.7.egg/pip/commands/install.py", line 347, in run
      root=options.root_path,
    File "/usr/local/lib/python2.7/dist-packages/pip-6.0.7-py2.7.egg/pip/req/req_set.py", line 549, in install
      **kwargs
    File "/usr/local/lib/python2.7/dist-packages/pip-6.0.7-py2.7.egg/pip/req/req_install.py", line 740, in install
      self.move_wheel_files(self.source_dir, root=root)
    File "/usr/local/lib/python2.7/dist-packages/pip-6.0.7-py2.7.egg/pip/req/req_install.py", line 949, in move_wheel_files
      isolated=self.isolated,
    File "/usr/local/lib/python2.7/dist-packages/pip-6.0.7-py2.7.egg/pip/wheel.py", line 234, in move_wheel_files
      clobber(source, lib_dir, True)
    File "/usr/local/lib/python2.7/dist-packages/pip-6.0.7-py2.7.egg/pip/wheel.py", line 212, in clobber
      shutil.copyfile(srcfile, destfile)
    File "/usr/lib/python2.7/shutil.py", line 83, in copyfile
      with open(dst, 'wb') as fdst:
  IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/six.pyc'
The command "pip install [package]" failed and exited with 2 during .

変更後

  • TravisCIのAsariさんのコメントを見つけた
  • ここでとる対応はすごく簡単で、配置先を変更するだけなのです
  • 以下のように--userオプションを追加することで、~/.local/以下に配置されるためsudoを要求されなくなります
.travis.yml
install: pip install --user [package]

[ 対応3 ] sudoを使わずに/etc/hostsを設定する

変更前

  • 以下のように/etc/hostsを直接変更していたので、当然sudoがないと ぱーみっしょんでぃないど! と怒られる
.travis.yml
before_install: sudo sh -c 'echo "127.0.0.1 travis.dev joshkalderimis.com" >> /etc/hosts'

変更後

  • またもやTravisCIの公式ドキュメント http://docs.travis-ci.com/user/hosts/ に丁寧に書いてある
    • このように書くと、/etc/hostsが期待通り更新されている
    • IPv4/IPv6どちらの設定にも追加され、IPv6が有効となる
.travis.yml
addons:
  hosts:
    - travis.dev
    - joshkalderimis.com

確認

  • TravisCIのコンソールログに以下があればコンテナベースの環境が使えています!という証拠です
This job is running on container-based infrastructure, which does not allow use of 'sudo', setuid and setguid executables.
If you require sudo, add 'sudo: required' to your .travis.yml
See http://docs.travis-ci.com/user/workers/container-based-infrastructure/ for details.

~ただの宣伝~

  • 全国のSeleniumer必読
  • Seleniumerといっていますが、Selenium, SauceLabs, Travis, Jenkinsに関するノウハウ書いているのでよかったら参考にしてみてください
17
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
11