Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How Quipper Works with CircleCI

Yuya Takeyama
December 03, 2018

How Quipper Works with CircleCI

Yuya Takeyama

December 03, 2018
Tweet

More Decks by Yuya Takeyama

Other Decks in Programming

Transcript

  1. How Quipper Works with CircleCI
    @yuya-takeyama

    View Slide

  2. 01
    02
    03
    04
    05
    Agenda | 自己紹介
    GitHub/CircleCI を中心としたワークフロー
    CircleCI で monorepo を CI する
    Quipper で使っている CircleCI 関連ツールの紹介
    まとめ

    View Slide

  3. 01 自己紹介

    View Slide

  4. @yuya-takeyama
    ➔ 2015年9月~: Web Developer at Quipper
    ◆ Rails/Backone.js/React.js/React Native などなど
    ➔ 2018年4月~: SRE at Quipper
    ◆ Kubernetes への移行や Kubernetes の運用およびその効率化
    ◆ Kubernetes 環境への移行に向けた開発者のサポートもミッション
    ◆ インフラ・SRE としてはまだまだ修行中

    View Slide

  5. 02 GitHub/CircleCI を中心としたワークフロー

    View Slide

  6. Quipper にとっての CircleCI
    ➔ ほぼ全てのリポジトリで CI/CD に利用している
    ◆ アプリケーションもインフラも
    ◆ Infrastructure as Code をかなり徹底してやってきている
    ➔ ぶっちゃけメチャメチャ依存度が高い
    ◆ CircleCI が止まるとデプロイとか止まってしまう
    ◆ 私とかであれば手動でなんとできるといえばできるけど、仕組み化できて
    ない... (その辺は追い追い)

    View Slide

  7. GitHub/CircleCI を中心としたワークフロー
    ➔ 大きく分けて 2 種類
    ◆ フィーチャーブランチをマージしてデプロイ
    ◆ master にマージした後、デプロイ用のブランチにさらにマージしてデプロイ

    View Slide

  8. フィーチャーブランチをマージするとデプロイされるパターン
    ➔ 細かくは...
    ◆ develop/master が分かれてたり
    ◆ release でリリーステスト環境が作られたり
    ◆ フィーチャーブランチもステージング環境にデプロイされたり
    ➔ アプリケーションはだいたいこのパターン
    ➔ インフラも一部はこのパターン
    ◆ miam による AWS IAM, roadworker による Route 53 の DNS

    View Slide

  9. View Slide

  10. デプロイ用のブランチにさらにマージしてデプロイするパターン
    ➔ 一つのリポジトリからのデプロイ対象がたくさんある時に使用する
    ◆ Ansible, Terraform, Kubernetes クラスタ
    ➔ master へのマージ時にはテストや差分の確認等のみ行われる
    ◆ 破壊的な変更はその時点ではしない
    ➔ release/*** というブランチにマージすると *** の環境へのデプロイが行われる
    ◆ 例: release/reverse-proxy-staging, release/reverse-proxy-production

    View Slide

  11. View Slide

  12. View Slide

  13. 03 CircleCI で monorepo を CI する

    View Slide

  14. View Slide

  15. Monorepo について
    ➔ サブディレクトリごとに変更をシェルスクリプトで検知
    ◆ 変更があったサービスだけテストを実行する・デプロイする
    ◆ CircleCI の機能でできてほしい...
    ➔ 最適化が大変
    ◆ 変更の有無によってコマンドの実行自体スキップするので、実行時間がバ
    ラバラ
    ◆ コマンド実行時だけ実行時間を Datadog に送っていい感じにモニタリング
    できるようにするツールを作ろうとしている

    View Slide

  16. 04 Quipper で使っている
    CircleCI 関連ツールの紹介

    View Slide

  17. circle-ghc
    ➔ CircleCI の実行結果を GitHub の Pull Request にコメントしてくれる
    ◆ 差分の出力ができるツールを使ったレビューにおいて大変便利
    ➔ Quipper SRE @lamanotrama さん作
    ➔ Bash のシェルスクリプトで書かれている
    ➔ オープンにしない理由は特にないのでめんどくさくて放置されている?
    ➔ 個人プロジェクトで使いたかったので Rust に移植した
    ◆ https://github.com/yuya-takeyama/circle-gh-tee

    View Slide

  18. View Slide

  19. yuya-takeyama/circleci-queue-to-datadog
    ➔ CircleCI のジョブがどれぐらい実行されているか・キューがどれぐらい詰まって
    いるかを Datadog に記録する
    ➔ Performance Pricing Plan にすればそもそも気にしなくてよくなるけど...
    ◆ その辺ちゃんと知らない頃に作った
    ◆ Quipper は頃合いを見つつ Performance Pricing Plan にしたい
    ◆ 現状 30 containers
    ➔ 管理者権限持ってるなら実行時間は管理画面からも見られる

    View Slide

  20. 実行中のジョブ
    キューで詰まっているジョブ

    View Slide

  21. circleci-env
    ➔ CircleCI のプロジェクトごとの環境変数を Infrastructure as Code する
    ◆ Ruby の DSL で定義できる
    ➔ 元 Quipper SRE の @hakobera さんの作
    ➔ 秘密情報は vault で暗号化して保持・適用が可能
    ➔ SSH 秘密鍵も管理できる
    ➔ Undocumented な API を使っているので現状未公開!!!

    View Slide

  22. Undocumented な API
    ➔ DELETE /api/v1.1/project/:project_id/ssh-key
    ➔ GET /api/v1.1/project/:project_id/settings

    View Slide

  23. 05 まとめ

    View Slide

  24. Quipper は CircleCI、
    CircleCI Japan及び
    そのコミュニティのご発展を
    お祈りしています!

    View Slide

  25. View Slide