質問: CIツールについて学んでいます。 Circle CIでは1コンテナまで無料で使えるようですが、そのコンテナの作られ方に少し疑問があります。 Circle CIとGitHubを連系させておいて、プロジェクトをpushすると、GitHubを通してCircle CI側でプロジェクト用のコンテナが作られ、GitHubにpushした内容がコンテナに送られる。その後テストがあれば実行されると言った具合かと思います。 プロジェクト用のコンテナというものは何をみて作られているのでしょうか?例えば、Railsアプリであれば、Gemfile、database.ymlなどでしょうか? OS種類やバージョン、言語のバージョンなど様々なプロジェクトを、きれいにコンテナとして構築することができるのですか? そこまでCircle CIというのは賢いものなのでしょうか?幾つかサイト等をみたのですが、コンテナ作成時の設定等見当たらなかったので、pushしたファイル等をみて勝手に作られているのかと思っています...。 何か勘違いしているような気がしていますが、ご回答宜しくお願いします。
回答: こんにちは。 他の方からも回答があると思いますが、わかるところだけコメントさせていただきますね。 基本はRailsなどプロジェクトのディレクトリに、CircleCI用の設定ファイルを置きます。 circle.yml というファイル名です。 CircleCIで「アプリケーション込みでDockerのコンテナをビルドしてどこかにpush」するのではなくて、とりあえずRailsのアプリケーションのテストをするだけなら、circle.yml に ``` machine: ruby: version: 2.4.0 ``` と指定してあげると、利用したいバージョンのrubyが入ったデフォルトのビルド用のイメージが割り当てられます。 実際は、CircleCIが用意しているビルド用のDockerイメージを利用します。また、Dockerイメージは、Ubuntuがベースになっています。 rubyやphp, pythonなどバージョンを指定すれば、それを組み込んでいるUbuntuのイメージが割り当てられます。 参考: https://circleci.com/docs/1.0/build-image-trusty/ さて、割り当たったubuntuのベースのイメージはrubyが入っているだけなので、そのあとにrailsのテストを通すためのいろんな下準備をしてあげないといけません。 追加のパッケージが必要であれば、apt-getする処理を書きますし、bundle install とか migrationとか、rake spec とかもcircle.ymlの中で定義が必要です。 ※CircleCIのビルドで「Railsアプリケーション込みのDokcerイメージを作ってどこかにpush / deployする」ケースはやったことがないのでわかりません....