CircleCI?
流行りのCIサービスです。
GitHub / BitBucketのPUSHに反応して、コードをゴニョゴニョします。
お金かかるの?
Pricing and Plan Information - CircleCI
1コンテナは無料です。
privateリポジトリでも、です。
つまり、ビルドに時間がかかっても良いなら、無料で使い続けられます。
ただし
OS Xのコンテナは有料です。
iOSアプリのCIには、お金が必要です。
つづき
仕事としてフルタイム使うと、1日5〜10ビルドは最低必要なので、$129/monthは必要です。
複数人で開発とかしてると、もう一つ上の$249/monthぐらいが必要かも。
なにをやらせるか
circle.yml
というファイルを、リポジトリのルートに置いておきます。
そこに実行させたいコマンドや、環境の指定を書いておくと、それをPUSHの度に実行してくれます。
こんなイメージ
machine:
java:
version: oraclejdk8
environment:
TERM: "dumb"
pre:
- scripts/env2file app/fabric.properties
test:
override:
- ./gradlew clean :app:testDebugUnitTestCoverage -PdisablePreDex
post:
- cp -r app/build/reports/tests $CIRCLE_ARTIFACTS
deployment:
master:
branch: master
commands:
- ./gradlew :app:uploadDeployGateDebug :app:uploadDeployGateRelease -PdisablePreDex
つまり、Linux上のコマンドで表現出来ることはだいたい出来る。
では、出来ることをつらつら並べていきます。
テストの実行
CIといえばテストですね。
CircleCIは頭がよく、Gemfileが置いてあればbundle install
するし、bundle exec rake test
とかも勝手にやってくれます。
まぁ、大抵は上書きします。
test:
override:
- なんか他にもやりたい
- bundle exec rake test:custom なんか引数
UIテストの実行
Seleniumなどを使った、ブラウザテストも出来る。(やったことないけど
Appiumを使った、Android / iOSのUIテストも出来る。(調査中
Lintの結果をPRコメントに
Android
Checkstyle / FindBugs / PMD / CPD / Android Lint
iOS
SwiftLint
Ruby
Brakeman / RuboCop / Rails Best Pratices / Reek
PHP
phpcs / phpmd
フロント系
ESLint / SCSS-Lint
詳しくは
Androidのコードを自動で解析し、GitHubのpull requestにコメントする - Qiita
とかで。
また、似たようなものはいくつかあります。
Dokumi
SideCI
reviewdog
ビルド
Android / iOSアプリのビルド。
Electronアプリのビルド。
goのクロスコンパイル。
$CIRCLE_ARTIFACTS
にとりあえず移動しておけば、いつでも取りに行けます。
配布
とはいえ、毎回CircleCIの画面に取りに行くのは面倒です。
AndroidならDeployGate、iOSならTestFlightなどに飛ばせます。
Electronやgoであれば、GitHub Releaseに置いておくこともできます。
デプロイ
herokuであれば、宣言的にアプリ名などを書いておくだけで、デプロイ出来るっぽい。
https://circleci.com/docs/continuous-deployment-with-heroku/
AWS ElasticBeanstalkであれば、ebコマンドでデプロイ出来るらしい。
インフラの変更
Terraform + GitHub + CircleCI + Atlasを利用してAWSの操作を自動化した - Glide Note
- Terraformでインフラをコード化
- コードをPull Requestでレビュー、マージ
- CircleCIが動いて、インフラの変更
→GUIからの開放
ドキュメントの作成
ドキュメントと実装を正しく同期しておくのは手間がかかります。
コードから自動生成出来るドキュメントは、CIで生成できます。
生成したドキュメントは
- CircleCIのArtifactsに入れておく
- GitHubのReleaseとして登録しておく
- コード管理しているリポジトリに
doc
などのブランチをつくり、そこにpushしておく - S3にputする
など、APIさえあれば、どこにでも移動できます。
API定義書
r7kamura/autodocを使えば、RailsのAPI定義書を、テストコードを書くだけで出力できます。
JSON schemaを書いているプロジェクトであれば、interagent/prmdでyml -> mdの変換ができます。
ER図
voormedia/rails-erdを使えば、RailsのmodelをER図として画像出力できます。
他にも、
- 静的ページgeneratorと組み合わせて、ビルド→ページの公開
- 技術書執筆にあたっての校正・PDF出力の自動化
- 別途cronサーバがあれば、nightly buildとか
ただ、CircleCIに頼りすぎるデメリットとして
- circle.yml職人化する可能性(Jenkinsおじさんよりは引き継ぎやすいはず。。。
- CircleCIがたまに不安定。
- HerokuやAWSなどに引きづられて落ちることも。
- CircleCIが無いと開発・運用が進まない
(テスト落ちてるけど、とりあえずデプロイしたい、とか)
無料で始められるし、Jenkinsを自分たちで運用するよりは楽なはず。
使い倒して、知見を共有してください
Monstar Labではエンジニアを募集しています。
中目黒・松江(島根)・ダナン(ベトナム)とかで働きたい人は、Wantedlyの「話を聞きに行きたい」ボタンより