2017-04 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
先日素振りがてら、個人の小さな Rails リポジトリを Dockerize しました。
https://github.com/masutaka/github-organization-watcher/pull/45
現在クローズドβの CircleCI 2.0 は Docker 前提らしいので、これも素
振りがてら移行してみました。
https://github.com/masutaka/github-organization-watcher/pull/48
CircleCI 2.0 はここから申請すれば、すぐ使えるようです。
https://circleci.com/beta-access/#request-access
(1) 1.0 では宜しくやってくれたけど、2.0 は circle.yml に全部書く必
要があるみたい。面倒そう。
(2) とは言え、Dockerfile や docker-compose.yml があるし、ちょっと
やれば動くだろう。
(3) Alpine Linux の Docker Image 使えば、1.0 よりは速くなるのかな。
(1) 予想に違わない面倒くささ・・・! オートマがマニュアルになった感じ。
(2) 使えませんでした /(^o^)\ 参考にはなったけど。
(3) 速い・・・!!!(移行前: 01:38、移行後: 00:30)
両方ともキャッシュあり状態です。Alpine Linux もそうかもしれないけ
ど、とにかくキャッシュのリストアが速かったです(後述)。あと、
CircleCI のビルドが全体的に高速です。
circle.yml は 1.0 から 2.0 に移行して、このようになりました。同じ
ディレクトリにある Dockerfile や docker-compose.yml は使っていません。
https://github.com/masutaka/github-organization-watcher/pull/48/files
docker-compose を使うことも出来るそうなので、あとで試すかも。
Using docker-compose - CircleCI
2.0 はローカルで circleci コマンドが使えるので、インストールします。
Running Jobs Locally - CircleCI
circleci コマンドはこの Docker イメージのラッパースクリプトでした。
Dockerfile は公開されていないようです。
https://hub.docker.com/r/circleci/picard/
checkout や restore_cache など、一部の命令はスキップされますが、
だいたい同じように動きます。
この辺を参考にしながら、実装していきました。
https://circleci.com/docs/2.0/
https://circleci.com/docs/2.0/language-ruby/
ローカルで試していた時は "apk add" が遅くて、Docker Hub に CI 専用
のイメージを置いて使ってましたが、CircleCI 上だと気にならないくら
いの速さだったので、今は ruby:2.4.0-alpine をそのまま使っています。
Downloading cache archive...
Unarchiving cache...
Error untarring cache: exit status 1
restore_cache で↑これが発生してハマりました。
どうやら、Alpine Linux だと、tar と gzip がなくて失敗するそうです。
インストールしましょう。
ここに必要なコマンドが書いてありました。はい、マニュアル読め奴ですね。
Building Custom Images for Docker Executor - CircleCI
キャッシュはこの辺りが参考になりました。ありがとうございます。
- Caching in CircleCI - CircleCI
- CircleCI 2.0に移行して新機能を活用したらCIの実行時間が半分になった話 - クラウドワークス エンジニアブログ
circle.yml にはこのように指定しました。
docker: - image: ruby:2.4.0-alpine environment: RDB_URL_BASE: postgres://postgres:@localhost - image: postgres:9.5-alpine
起動されたコンテナには Ruby が入っており、PostgreSQL も起動してい
るように見え、どうやっているんだろうと思っていたら、
Choosing an Executor Type - CircleCI
It’s also possible to specify multiple images. When you do this,
all containers will run in a common network. Every exposed port
will be available on localhost from a primary container.
(snip)
In a multi-image configuration job, steps are executed in the
first container listed (main container).
最初に書いたイメージがプライマリとして起動されるようです。Every
exposed port ... とか書いてあるので、PostgreSQL も起動しているよう
に見えたのは気のせいだったのかな...?
キャッシュした /usr/local/bundle のリストアがめっちゃ速いです。
Restore bundler cache のところ見ると、たったの 2 秒です。
https://circleci.com/gh/masutaka/github-organization-watcher/172
- CircleCI 2.0 は高速だった
- circle.yml に全部書く必要があるのは面倒
- Dockerize の次にやるには良いお題
2017-04 / 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
最終更新時間: 2017-04-13 23:09