-
Notifications
You must be signed in to change notification settings - Fork 4
/
610.txt
207 lines (138 loc) · 11.2 KB
/
610.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
[21] [DFN[Travis CI]] は、 [[CI]] の [[Webサービス]]です。
この分野では草分け的存在です。
[REFS[
- [2] [CITE@en[Travis CI - Distributed build platform for the open source community]]
( ([TIME[2012-04-08 11:34:45 +09:00]] 版))
<http://travis-ci.org/>
]REFS]
* Travis CI 使ってみた
[PREAMBLE[
[30] 初出:
<http://d.hatena.ne.jp/wakabatan/20120408/1333878824>,
[TIME[2012-04-08]]
]PREAMBLE]
テストをいい感じで勝手に実行してくれるのないかなーと思ってたら、 Travis CI<http://travis-ci.org/> とかいうのがあると聞いたので、試しに使ってみました。
仕事では昔からそういうのやってて、最初は自分で作っていたり、最近は Jenkins 氏になっていたりしますが、適当なタイミングでテストが実行されて結果が IRC に流れてくる環境が整っています。仕事以外のプロジェクトもそうしたいと思っていましたが、自作にしろ既製品にせよ環境の構築と維持が面倒です。
Travis CI は Continuous Integration for the Open Source Community というキャッチフレーズ(?)の、 GitHub 上のソフトウェアの CI サービスです。 GitHub アカウントでログインしてリポジトリを選択して、あとはリポジトリ内に簡単な設定ファイル (言語とか実行するコマンドとか) を用意して push するだけ<http://about.travis-ci.org/docs/user/getting-started/>で、あちらのサーバーで実行してくれます。とっても手軽で便利です。
開発・運用リソースはもちろん、サーバーや回線の費用も結構かかってるだろうに、どうやって運営しているんだ、と心配になってきますが、たくさんのスポンサーのみなさま<https://love.travis-ci.org/>が支えてくださっているそうで、とてもありがたい話です。
使い方はとても簡単なのでドキュメントを読みましょう。以下は使ってみて気づいたことなどのメモです。
** 登録
Travis 側でログインしてリポジトリを選ぶだけで登録できます。あとは push するだけ。簡単すぎて拍子抜けします。
** ビルド
今回はいくつかの Perl のモジュールのテストを実行する処理を登録しています。 Perl のバージョンは何種類か用意されていて、リポジトリの [CODE[.travis.yml]] で指定することができます。
ただし、最新の 5.14 を指定したのに、なぜか perl -v したら 5.12.4 と出てきました。不思議ですねw あらかじめ用意されていないバージョンがどうしても使いたければ、自分で perlbrew で入れてしまえばOKです。
Perl 本体と cpanm は元から用意されていますが、他に必要なモジュールがあれば、自分で入れる必要があります。 carton などで開発環境を簡単に用意できるように既になっていれば、そのコマンドを [CODE[.travis.yml]] に指定するだけです。 XS モジュールが C のライブラリに依存しているような場合でも、 apt でインストールできるようです。
MySQL や MongoDB など、よく使われてそうなストレージは最初から用意されています。 Perl だと Test::mysqld でテストを書いたりしますが、特に何も設定しなくても普通に実行できます。
Perl など、言語のバージョンは複数指定できます。複数指定するとそれぞれ並行してビルドを実行してくれます。
テストスクリプトの出力はできるだけ綺麗にしておいた方がいいです。同じ出力が繰り返されていたり、一定サイズに達したりすると、無限ループと判断されて強制終了されるみたいです。 Wide character がうんたらみたいな Perl の警告を放置していたら、長いテストの途中で切られてしまいました。そこまでいかなくても、あまりにサイズが大きいと Web サイト上で結果を表示する時に動きがとても遅くなって不便です。
なお、ビルド環境は毎回リセットされるみたいなので、難しいことは考えずに必要なものはどんどん入れてしまってOKです。逆に言えば、依存モジュールのインストールなどの時間がかかる作業も毎回行う必要があります。
** 結果
実行結果は Web サイト上で確認できる他、メール、 IRC、 Web Hooks で通知を受け取ることができます。
Web サイトのトップにいきなり自分のプロジェクトが出てくるのでちょっとびっくりしますがw、それを選択すると実行の進捗や結果、履歴を見ることができます。
プロジェクトの IRC チャンネルがあれば、そこに通知を流すのが良さそうです。
時間帯などにもよるのかもしれませんが、 push するとほぼ即座にビルドが開始されるようです。ビルドにかかる時間はもちろんビルドの処理内容に依存しますが、わりとすぐに結果が返ってきます。
Jenkins なんかと比べると単純でできることも少ないですが、その分簡単ですし、普通に開発してテストして、という用途には十分なんじゃないでしょうか。
** .travis.yml の例
[PRE(yaml code)[
language: perl
perl:
- "5.14"
- "5.10"
before_install: git submodule update --init
install: "make test-deps"
script: "make test"
notifications:
email:
- foo@example.com
irc:
channels:
- "irc.example.com#foo"
use_notice: true
]PRE]
こんな感じのファイルをリポジトリに置いておきます。[DEL[みんな大好き Perl 5.8 は残念ながら用意されていませんでした...]]
** 追記 (2014年1月)
いつからか、
[PRE(perl code)[
language: perl
]PRE]
... のように言語を明記しないと言語ごとのバリエーションが認識されなくなったようです。
現在は Perl 5.8 も追加されています。
* 実行完了後の処理を指定する
[6] after_success は、複数の job が実行されるとき、そのそれぞれで実行される。
すべての job が成功した時だけ実行する方法は公式には用意されておらず、要望はあるが長期間放置されている [SRC[>>5]]。
;; [12] もう何年も経っているので、なおす気がなさそう。。。
[8] Travis の API を使って他の job の実行状況を監視し、すべて成功していたら最後に一度だけ実行するスクリプト [SRC[>>7]] が利用者により公開されている。
;; [11] しかし 1つのjob の実行時間上限を超えるほど他の job の実行完了まで時間がかかると、
エラーになってしまいます・・・。
[REFS[
- [5] [CITE@en[Single after_success callback after *all* builds · Issue #929 · travis-ci/travis-ci]] ([TIME[2015-10-08 19:52:34 +09:00]] 版) <https://github.com/travis-ci/travis-ci/issues/929>
- [7] [CITE@en[dmakhno/travis_after_all]] ([TIME[2015-10-08 19:54:53 +09:00]] 版) <https://github.com/dmakhno/travis_after_all>
]REFS]
[10] [CODE[[[after_success]]]] が失敗しても、失敗したことが無視されて全体として成功扱いになります。
[TIME[2015-12-20T15:07:41.800Z]]
[26] [CITE@en[Build Stages - Travis CI]] ([TIME[2017-12-29 01:51:08 +09:00]]) <https://docs.travis-ci.com/user/build-stages>
* IRC over TLS で結果報告する
[9] [CITE@en[IRC notifications over SSL and unstandard ports are undocumented · Issue #428 · travis-ci/docs-travis-ci-com]]
([TIME[2015-12-14 18:49:30 +09:00]] 版)
<https://github.com/travis-ci/docs-travis-ci-com/issues/428>
* submodule を自動で update しない
[13] 今まで clone 時に submodule が自動的には init & update されていませんでしたが、
2016年4月に突然仕様変更があったようで、無限に再帰的に取得されるようになりました。
[15] [CODE[.travis.yml]] で
[PRE(code)[
git:
submodules: false
]PRE]
... と指定するとこの動作を無効化できます。
[REFS[
- [14] [CITE@en[Common Build Problems - Travis CI]] ([TIME[2016-04-30 10:42:25 +09:00]] 版) <https://docs.travis-ci.com/user/common-build-problems/#Git-Submodules-are-not-updated-correctly>
]REFS]
* Mac OS X
[16] [[Mac OS X]] でのテスト実行はなぜか非常に待たされることがあります。
(実行環境が足りてないのでしょうか。)
* メモ
[1] [CITE@en[Travis CI: Welcome to Travis CI]]
( ([TIME[2012-04-07 13:05:23 +09:00]] 版))
<http://about.travis-ci.org/>
[3] [CITE[Validate your .travis.yml file]]
( ([TIME[2014-05-12 09:59:10 +09:00]] 版))
<http://lint.travis-ci.org/>
[4] [CITE[Travis CI 使ってみた - 若葉もすなる☆日記というもの]]
( ([TIME[2013-08-09 03:44:52 +09:00]] 版))
<http://d.hatena.ne.jp/wakabatan/20120408/1333878824>
[23] 価格 <https://travis-ci.com/plans>
$129/月
デプロイ失敗後の処理をうまくやってくれない。失敗しても成功扱いになってしまう。
[TIME[2014-10-02]]
[17] ビルド中止ボタンがついていますが、まともに動かないことが多いです。
何度も押してやっと止まるか、止まらないか。
[20] ひどいときは中止完了で中止ボタンが出ないのに、なぜか実行中の表示のまま経過時間だけ無情に進み続けることもあります。
[18] [CITE@en[Build not starting on OS X · Issue #6841 · travis-ci/travis-ci]]
( ([TIME[2017-02-08 11:31:12 +09:00]]))
<https://github.com/travis-ci/travis-ci/issues/6841>
[19] [CITE@en[Customizing the Build - Travis CI]]
( ([TIME[2017-02-06 16:54:22 +09:00]]))
<https://docs.travis-ci.com/user/customizing-the-build#Build-Timeouts>
[22] [CITE@en[Using Docker in Builds - Travis CI]]
([TIME[2017-08-20 02:14:13 +09:00]])
<https://docs.travis-ci.com/user/docker/>
[24] [CITE@en[Build Environment Overview - Travis CI]]
([TIME[2017-10-06 01:06:34 +09:00]])
<https://docs.travis-ci.com/user/reference/overview/>
[25] [CITE@en[Common Build Problems - Travis CI]]
([TIME[2017-10-06 01:06:34 +09:00]])
<https://docs.travis-ci.com/user/common-build-problems/>
[27] [CITE@en[Build Stages and allow_failures do not work well together · Issue #7789 · travis-ci/travis-ci]]
([TIME[2017-12-29 13:33:40 +09:00]])
<https://github.com/travis-ci/travis-ci/issues/7789>
[28] キャンセル機能相変わらずまともに動かないなあ。
ちゃんと止まってるのか怪しいし、 Build Stages みたいな新機能だと忘れられてるし。。。
[29] [CITE@en[The Travis CI Blog: Announcing support for open source projects on travis-ci.com]]
([TIME[2018-05-25 23:04:19 +09:00]])
<https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps>
[31]
travis コマンドは ruby と gem が必要な上に docker 版も公式で存在しないとか舐めてる。
Travis CI というサービス自体が
[[Docker]]
時代の前からあるから、
時代に追いつけてないんだろうなあ...