CircleCIで出来るコト

  • 43
    いいね
  • 0
    コメント

CircleCI?

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コメントに

image


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 にとりあえず移動しておけば、いつでも取りに行けます。

image


配布

とはいえ、毎回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

  1. Terraformでインフラをコード化
  2. コードをPull Requestでレビュー、マージ
  3. CircleCIが動いて、インフラの変更

→GUIからの開放


ドキュメントの作成

ドキュメントと実装を正しく同期しておくのは手間がかかります。
コードから自動生成出来るドキュメントは、CIで生成できます。


生成したドキュメントは
- CircleCIのArtifactsに入れておく
- GitHubのReleaseとして登録しておく
- コード管理しているリポジトリにdocなどのブランチをつくり、そこにpushしておく
- S3にputする
など、APIさえあれば、どこにでも移動できます。


API定義書

r7kamura/autodocを使えば、RailsのAPI定義書を、テストコードを書くだけで出力できます。

JSON schemeを書いているプロジェクトであれば、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を自分たちで運用するよりは楽なはず。
使い倒して、知見を共有してください :pray:


image

Monstar Labではエンジニアを募集しています。

中目黒・松江(島根)・ダナン(ベトナム)とかで働きたい人は、Wantedlyの「話を聞きに行きたい」ボタンより :bow:

  • この記事は以下の記事からリンクされています
  • node,npmのお勉強1からリンク