Slide 1

Slide 1 text

How Quipper Works with CircleCI @yuya-takeyama

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

01 自己紹介

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

03 CircleCI で monorepo を CI する

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

05 まとめ

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

No content