パラボラアンテナと星の日記

あることないこと

TravisCI Meetup Tokyoに参加しました #travisci_jp  

(英語聞き取れてなかったり、誤訳あるかもしれない)


開催日時: 2014年09月17日(19:00-21:00)
会場: 渋谷区渋谷2-21-1 (渋谷ヒカリエ) 21F
URL: http://connpass.com/event/7901/

  • 主催

    • DeNA

      • リクルーティング目的って言ってた
  • セクション

    • 19:00 - hiro asari氏(TravisCI)

      • TravisCIの使い方
    • 19:30 - joshk氏(TravisCI CEO, Co founder @j2h)

      • TravisCIについてプレゼン
    • 20:00 - 有志によるLT5,6人

ossan.jpg



hiro asari氏 のプレゼン

日本語。
travis ciの話。
会場、travis使ってる人に挙手してもらったところ、半分くらいだった(意外と少ない)。



ライフサイクルの話。

.travis.ymlに書いたことがどのような順番で実施されるか。document読めばわかることだけど、ためになった

lifecycle.jpg



ciのデモ

.travis.ymlを作ってgithubにpushしてビルド ->
Rakefileを作ってgithubにpushしてビルド ->
envを設定してgithubにpushしてビルド ->
rubyのバージョンを指定してgithubにpushしてビルド ->...
を繰り返しまくっていた。

結構初心者向けで、少し物足りなかったです。
以下、各種Tips紹介。



Tips


sudo: false

language: ruby

rvm:
  - '1.9.3'
  - '2.1'

  • [sudo: false]はsudoを禁止する(秘密の設定らしい)

  • rubyプロジェクトの.travis.ymlの一例

下記は、
rubyの最先端でテストしたい + 特定のバージョンでは失敗OKみたいなこともしたい みたいなことをしている


sudo: false

language: ruby

rvm:
  - '1.9.3'
  - '2.1'
  - ruby-head

env:
  global:
    - FOO=bar
  matrix:
    - RAKE_TASK=echo
    - RAKE_TASK=foo

matrix:
  allow_failures:
    - rvm: ruby-head

script:
  - bundle exec rake $RAKE_TASK

services:
  - redis
  - elasticsearch

addons:
  postgresql:
    - '9.2'
    - '9.3'

  • "ruby-head"は開発中の最新ruby(trunk)のこと。都度Travisがビルドしている
  • env:は環境変数で、globalで全体に効き、matrix:で環境変数ごとのパターンをテストできる
  • allow_failures: は、そのバージョンのテストが落ちても全体としては失敗したことにならない、ということ
  • services: でテストに利用するようなサービスを指定できる。(redisとか、elasticsearchとか)



割りと瑣末な所感

  • Sublime上でgitコマンド使いまくってた(プレゼン時にターミナルを使わない。見やすい)
  • あと、標準出力に10分以上出力がないと異常とみなされエラーとなる問題があるが、
    bashで「travis_wait」とかするとウェイト時間を長くすることができるらしい(秘密の設定)



joshk(Travis ci CEO) のプレゼン

  • 英語だった。。!
  • 油断してた、けど半分くらいはわかった(特に技術的な話題はわかった)
  • 自己紹介のところはよくわからんかった



How does travis work?

openvz と dockerを使っている
125,435 jobs per day
125,435 vms shut down(ジョブごとにvmを立ち上げたりしてる)

  • Node.jsとRubyのプロジェクトが多い

  • 社内には2つのチームがあって、チームteal(UX/UI担当)とチームblue(インフラ)がある。

  • チームblueでは、Docker(the big whale!って言ってた)使ってる



"But It Works On My Machine!" が起きる要因

  • 「おれのマシンでは動くのに!」が起きる要因
  • some new, some old some simple, some crazy
  • 意訳:ときどき狂気に満ちた問題がある

* 注:ここから超意訳

(1枚目のスライドは撮るのを忘れた)

超意訳:
この中で開発にMacを使ってる方?
->
会場、いきなり質問が来たので手を挙げる人が少ない
->
Macだよ、Mac
->
手を挙げる人がちらほら
->
では、プロダクションでMacを使っている人は?
->
ほとんど手を挙げず。
->
つまり、本番と同じ環境で動かすってこと大事だってことだ。

2枚目
inode file ordering differense

2.jpg

超意訳:
ファイルのオーダリングって、OSによって違う
ex.) mtime, alphabetal order
Test::Unit使ってる方?

  • >あまり手が上がらない

RSpec使ってる方?

  • >結構手が上がる

RSpecはデフォルトでランダムにテストするよね。だから、そのままでは同じ順序では実行できない

3枚目
Packages differences between travis ci and dev e.g.npm

3.jpg

超意訳:
npmは狂気だ。Gemfileは常識的だ。

4枚目
Services which are slow to start or configured differently

4.jpg

超意訳:
(よく聞き取れず。)

5枚目
Obscure bugs in language versions

5.jpg

超意訳:
ubuntuのあるバージョンのpythonは、linuxディストリビューションを返す関数にdebianと返す。
このバグは狂気的だ。

6枚目
Cross platform tooling issues

6.jpg

超意訳:
sedが取るオプションって、Macのほうが多いじゃん(Linuxでは動かないオプションが有る)

7枚目
7.jpg

超意訳:
(よく聞き取れず。)「apt-getの間にダッシュが要りますね。」とは言っていた。

8枚目
8.jpg

(よく聞き取れず。)またテストの順序の話だった

9枚目
9.jpg

超意訳:
タイムゾーンを愛している人はいるか?」

  • >笑いが起きていた

10.jpg

コンテナ型とハイパーバイザ型でのテストの動きの違い



駄文ですが疲れました。思い出したら追記するかもです