CircleCI
CircleCI2.0

CircleCI 2.0でMySQLのイメージを使うならば、CircleCIが配布しているイメージを使わないと損

More than 1 year has passed since last update.

はじめに

2017/09/15 に DMM さんで CircleCI Meetup Tokyo #3 というイベントが行われ、そこで CircleCI の中の人である Kim, Hirokuni さんからお話された内容なんだが、あんまり拡散されてない気がしたので、記事を書いてみた

CircleCI 2.0 で MySQL を使う場合の設定

CircleCI 2.0 は 1.0 までのように VM ベースの環境(machine executor)も使うことができるが、基本的には Docker ベースの環境(docker executor)が推奨されている。

例えば、PHPのテストをする場合は以下のように書いているのではないだろうか?

version: 2

jobs:
  build:
    docker:
      - image: php:7.1-apache
      - image: mysql:5.7
    steps:
      - checkout
      - ...

上記のように、MySQLのimageをDocker Hubで配布されているオフィシャルイメージを使っていて、1.0 から 2.0 に移行したのに思ったほどは早くなってないという方はいないだろうか?

CircleCI Meetup Tokyo で話していただいた内容によると、CircleCI 1.0で提供されているMySQL環境は CircleCI 側でいろいろチューニングされていてそれで速度アップしていたが、CircleCI 2.0を開発した当初はそのチューニングをしていなくて、思ったように速度がでてなくて、後から1.0同等のチューニングしたimageをつくったとのこと。

なので、上記の設定は以下のように置き換えることができる。

version: 2

jobs:
  build:
    docker:
      - image: php:7.1-apache
      - image: circleci/mysql:5.7
    steps:
      - checkout
      - ...

見ていただくとわかるが、「circleci/」を頭につけるだけ。実際、オフィシャルのMySQLイメージを使うのに比べると、CircleCIが配布しているMySQLイメージを使うと、かなりの実行時間の短縮ができたので、まだ使ってない人はすぐに切り替えたほうがいいと思う。

このimageだが、以下のページに書かれているようにデフォルトで「circle_test」というテスト用のdatabaseが準備されているのは1.0と同じだが、接続ユーザは1.0の頃は「ubuntu」だったのが「root」になってるので、1.0から移行する場合は注意が必要となる。

まとめ

以下のページを診てもらうとわかるが、CirclCI 自身が結構オフィシャルのイメージを配布しているので、それを活用するとCIの時間がさらに短縮されるかもしれないので試してみるのがいいと思う。

おまけ

今まで気がついてなかったが、「circleci/mysql:xxx-ram」というタグがあるけど、これ使うとさらに早くなるのかなぁ。ためしてみないといかん・・・