Help us understand the problem. What is going on with this article?

CircleCIで出来るコト

More than 1 year has passed since last update.

CircleCIで出来るコト

by noboru_i
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:

noboru_i
Androidを中心に、iOSやサーバサイドも少しだけやっています。 CircleCIやDangerといった、CI/CD周りにも興味があります。
http://noboru-i.github.io/
monstar-lab
自社サービス「モンスター・チャンネル」や「セカイラボ」をはじめ、日本を代表する企業のWeb・アプリの受託企画/開発を行っています。
https://monstar-lab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした