circle.ymlの書き方
この記事は CircleCI Advent Calendar 2015 - Qiita の 8日目の記事です。
まだCircleCIを触って2週間のペーペーなので、基本的なところについてDove並みの優しさで書いていきたいと思います。
なのでベテランさんは通り過ぎてください。
※2017/11/21追記
この記事はCircleCI 1系の記事なので2系は書き方変わってます。
2.0の書き方は以下のブログを参考にしていただいたら分かりやすいかと思います。
circle.ymlの基礎
CircleCIの使い方として、まずプロジェクトのrootにcircle.ymlを置くことで、様々な設定を行うことができます。
circle.yml内に記述する主な項目として
- machine:
- checkout:
- dependencies:
- database:
- test:
- deployment:
の6つが用意されています。
用意はされていますが全て記述する必要はありません。
一個づつ説明していきます
machine
CircleCiのコンテナの設定を記述します。
よく使いそうなところで言えば
- timezone:
- hosts:
- environment:
- services:
といったところでしょうか。
例
machine: timezone: Asia/Tokyo hosts: #/etc/hostsを書き換える dev.hogehoge.com: 127.0.0.1 environment: DATABASE_URL: mysql://geho:@127.0.0.1:3306/hoge services: - cassandra
timezone,hosts,environmentはそのままの意味で、 servicesはCircleCiがデフォルトでインストールしていないdb serviceをインストールしたい時に記述します。
てかそもそも言語とかインストールしてないけど記述しなくていいのかという疑問があるかもしれません。
安心してください。入ってますよ。
https://circleci.com/docs/environment#languages
リンク先の内容が既にinstallされている設定です。
もし使ってる言語のversionがデフォルトと違うという場合は明示的に
machine: ruby: version: 2.1.4
というようにversionを指定する必要があります。
checkout
これはCircleCiを始める時にgitのプロジェクトを選択するだけで事足りてるので使ったことないのですが、sampleだとgitのsubmoduleを追加する時などに使うようです。
dependencies
基本的にCircleCiはrootにpackage.jsonやGemfileのようなファイルを置いとくと勝手にnpm installやbundle installを行ってくれます。
なので、何かオプションをつけて実行したい時や、package.jsonに記述していないけど別途なにかinstallしたい時などに記述します。
例
dependencies: override: npm install --production pre: npm install coffeescript
ここで脱線しますが、override: 、pre: なる新しいキーが出てきました。
これはオプションで付与でき、CircleCiのデフォルトのコマンド実行を上書きしたり、前後に別のコマンドを入れることができます。
override: デフォルトのコマンドを上書き
pre: CircleCiのデフォルトコマンド実行前
※上で説明した通りデフォルトではnpm installが自動的に呼ばれるのでpreはその前に実行されるということです
- post: CircleCiの実行後デフォルトコマンド
※ちなみにデフォルトと書いてますが正式にはCircleCiの推測に基づくデフォルトコマンドです。 CircleCi「package.jsonがあるから、npm install 呼んどくか」のような推測だと推測しました。
database
これも使ったことないので、詳しくないのですが、sampleだとテストデータとかをsqlとかでinsertしたい場合に使うようです
database: override: - mysql -u ubuntu circle_test < my-database-setup.sql
sampleまるまる持ってきましたがこんな感じです。
test
ここも基本的には言語に沿ったtestを実行してくれますが、足りない場合に記述します。
test: pre: - echo "-----start test-----" override: - go test -cover post: - echo "-----end test-----"
deployment
これもそのままですが、deployのコマンドを記述します。
deployment: deploy: branch: master commands: - make build - make deploy
branchはCircleCiに登録しているプロジェクトのブランチを。
commandsはそのままで、deployのためのコマンドを記述するだけです。
以上でcircle.ymlの基礎は終了です。
より詳しい情報はドキュメントを参照してください。
公式のsampleのymlはこちらです。
例の言語がgoやらrubyやら混在してたり、後半明らかに失速して雑になってしまいましたが、とりあえず基本的なところは押さえられたんじゃないかと。
何か間違ったこと書いてありましたら指摘していただけると幸いです