LoginSignup
379

More than 3 years have passed since last update.

CircleCIで出来るコト

Last updated at Posted at 2016-12-17
1 / 30

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 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を自分たちで運用するよりは楽なはず。
使い倒して、知見を共有してください :pray:


image

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
379