$30 off During Our Annual Pro Sale. View Details »

CircleCI Ship Quality Code, Faster

CircleCI Ship Quality Code, Faster

Noboru Kurumai

May 30, 2019
Tweet

More Decks by Noboru Kurumai

Other Decks in Programming

Transcript

  1. 1

    View Slide

  2. 2
    自己紹介

    View Slide

  3. 3
    今日お話したいこと
    - CircleCI の概要(さらっと)
    - ビルドの高速化
    - CircleCIでできること
    - ビルドの高速化のその先へ

    View Slide

  4. 4
    について

    View Slide

  5. CircleCI
    ● ソフトウェア開発者をターゲットに、より良いコードをより早くデリバリす
    るためのサービスを提供
    ● 2011年に米国サンフランシスコで創業
    ● 世界中に200名以上の従業員
    ● 2018年1月にシリーズC($31M)を調達。合計で$59.5M(≒66億円)
    REPRESENTATIVE CUSTOMERS

    View Slide

  6. 6
    グローバルで100,000社以上にご利用頂いています

    View Slide

  7. 7
    の思想
    - コンフィグはファイルに書かれるべき
    (コードと同じくレビューとバージョン管理を行う)
    - 明示的であるべき
    - たくさんの人の目に触れながら開発者が改善を繰り返す

    View Slide

  8. 8
    .circleci/config.ymlでテスト環境を統一

    View Slide

  9. 9
    .circleci/config.ymlでテスト環境を統一
    https://circleci.com/docs/2.0/sample-config/
    Dockerイメージを指定
    コードの取得やテスト内容を
    ステップとして記述
    個々のジョブ定義
    ジョブを組み合わせたワークフロー定義
    ・連続実行
    ・ファンアウト・ファンイン
    ・スケジューリング
    ・ブランチ別
    ・タグ別 ...等

    View Slide

  10. Running CI/CD with our hosting options
    cloud
    server Active users
    Active users
    VCS
    VCS
    Databases
    Caches &
    Artifacts
    Build
    Fleet
    (GitHub.com or GitHub Enterprise)
    Databases
    Caches &
    Artifacts
    Build
    Fleet

    View Slide

  11. 11

    https://github.com/kurumai/pelican-bookstore/issues/1

    View Slide

  12. 12
    ビルドの高速化

    View Slide

  13. 13
    そもそも高速化って何でやるの?
    - 待っている時間を減らしたい
    - 待っている間は他のことが手につかない
    - 他のことをやったとしても、コンテキストスイッチのコストは発生する
    - 早くバグを見つけたい
    - バグは(意図せず)作り込んだタイミングから、
    可能な限り早く検出して修正したい
    - 作ってから時間が経てば経つほど修正にかかるコストが増える
    (あれ、このコードの意味って・・・)
    - コスト(費用)を減らしたい
    - ビルド実行時間による課金の場合、不要なビルドを減らしたり、時間を短くしたい
    - 一方、速くするための機能に課金が発生する場合も・・・
    投資対効果の見極めが必要

    View Slide

  14. 14
    ビルドパイプラインの流れ(例)
    1. コードのコミット(プッシュ)
    2. ビルドキュー待ち
    3. ビルド用コンテナの起動
    4. ソースコードのチェックアウト
    5. 依存ライブラリのダウンロード
    6. 静的解析(Lint)
    7. 単体テスト
    8. 結合テスト
    9. 成果物の保存

    View Slide

  15. 15
    ビルドパイプラインの流れ(例)
    これを数分で終わらせたい
    (ただし規模にもよる)
    1. コードのコミット(プッシュ)
    2. ビルドキュー待ち
    3. ビルド用コンテナの起動
    4. ソースコードのチェックアウト
    5. 依存ライブラリのダウンロード
    6. 静的解析(Lint)
    7. 単体テスト
    8. 結合テスト
    9. 成果物の保存

    View Slide

  16. 16
    でできること

    View Slide

  17. 17
    Dockerサポート
    - CircleCIはネイティブでDockerをサポートしています。
    - VMによるCIと比べて非常に高速にビルド環境を構築することが可能です。
    https://circleci.com/docs/2.0/circleci-images/

    View Slide

  18. 18
    Compute Options

    View Slide

  19. 19
    ファイルのキャッシュ・共有
    同一ジョブ間のキャッシュ
    ワークフローが繰り返し実行される中で、同一ジョブ
    で利用される永続データを使い回す。
    同一ワークフロー内の データ共有
    同一ワークフロー内の異なるジョブ間でデータを共
    有する。

    View Slide

  20. 20
    ビルドの高速化(並列処理)
    4並列でテストを実行
    https://circleci.com/gh/kurumai/circleci-step-by-step/210

    View Slide

  21. 21
    新しい料金体系:

    View Slide

  22. 22
    ビルドパイプラインの流れ(例)
    Performance Planでキュー待ち無し
    1. コードのコミット(プッシュ)
    2. ビルドキュー待ち
    3. ビルド用コンテナの起動
    4. ソースコードのチェックアウト
    5. 依存ライブラリのダウンロード
    6. 静的解析(Lint)
    7. 単体テスト
    8. 結合テスト
    9. 成果物の保存
    1st class Dockerサポート
    ファイルのキャッシュ・共有
    マシンスペックの最適化
    並列処理

    View Slide

  23. 23
    ビルドの高速化の
    その先へ

    View Slide

  24. 24
    そもそも高速化って何でやるの?
    - 待っている時間を減らしたい
    - 待っている間は他のことが手につかない
    - 他のことをやったとしても、コンテキストスイッチのコストは発生する
    - 早くバグを見つけたい
    - バグは(意図せず)作り込んだタイミングから、
    可能な限り早く検出して修正したい
    - 作ってから時間が経てば経つほど修正にかかるコストが増える
    (あれ、このコードの意味って・・・)
    - コスト(費用)を減らしたい
    - ビルド実行時間による課金の場合、不要なビルドを減らしたり、時間を短くしたい
    - 一方、速くするための機能に課金が発生する場合も・・・
    投資対効果の見極めが必要

    View Slide

  25. 25
    そもそも高速化って何でやるの?
    - 待っている時間を減らしたい
    - 待っている間は他のことが手につかない
    - 他のことをやったとしても、コンテキストスイッチのコストは発生する
    - 早くバグを見つけたい
    - バグは(意図せず)作り込んだタイミングから、
    可能な限り早く検出して修正したい
    - 作ってから時間が経てば経つほど修正にかかるコストが増える
    (あれ、このコードの意味って・・・)
    - コスト(費用)を減らしたい
    - ビルド実行時間による課金の場合、不要なビルドを減らしたり、時間を短くしたい
    - 一方、速くするための機能に課金が発生する場合も・・・
    投資対効果の見極めが必要
    アイデアをできる限り早く実現・リリースして、顧客か
    ら素早くフィードバックを得るため

    View Slide

  26. 26
    そこで
    - Continuous Delivery (継続的デリバリー)
    常にリリース可能な状態を維持する
    - Continuous Deployment (継続的デプロイメント)
    自動でステージング・本番環境へデプロイする

    View Slide

  27. 27
    ユーザー
    コミュニティの場
    @CircleCIJapan
    CircleCI Japan User Group
    https://circleci.connpass.com/
    https://twitter.com/CircleCIJapan
    https://www.facebook.com/group
    s/2180735222207131/
    ● FAQ、イベント情報、ブログ投稿連絡など
    ● イベント、リリース、お知らせなど
    ● イベント申込

    View Slide

  28. 28
    今後の
    コミュニティ活動
    ● 5月28日 : 第4回ミートアップ in 東京
    ● 6月?日 : 第5回 東京 at ZOZO オフィス
    ● 6月13日 : CEO Jim: CircleCI
         成長の軌跡と未来
    ● 7月19日 : デプロイしNight in 福岡

    View Slide

  29. 29
    Velocity comes from culture

    View Slide

  30. Thank you.
    30

    View Slide