12/3 (月) にサイボウズ様オフィスで開催された「CircleCI Japan User Community Kickoff」に参加した.今回は招待制のプライベートイベントで,CircleCI を日頃から圧倒的に活用している人たちが集まっていたので,有名人多すぎでは?という感じだった.僕は CircleCI 関連のブログを多く書いているということで招待して頂いた.ありがとうございます!
(参加者に配られたノベルティ!)
CircleCI User Community @kemorimo & @kimhirokuni
- CircleCI User Community
- 「CircleCI ファンのためのコミュニティ」を作る
- 今後使うハッシュタグ「#circlecijp」
- 最近のリリース情報
- Orbs リリース
- Config v2.1
- Xcode 10.1 対応
- Workflow レベルでの通知
- ビルドパフォーマンス 33% Up
- インスタンスタイプを C5 系に移行した
- サポートナレッジベース日本語化完了
- 公式ドキュメント日本語化開始
サイボウズを支える CircleCI @miyajan
- 今までは Jenkins + Drone を使っていた
- CircleCI 導入開始
- 1.0 → 2.0 になり,使えるようになった
- CircleCI Server (Enterprise) 導入
- CircleCI Enterprise Free Trial - CircleCI
- GitHub Enterprise と連携する
- 事例
- 1日1回 CicleCI 経由で VPC を再構築する(常に自動化を試す)
- Performance Pricing Plan
- コンテナ数課金ではなく,必要なときに従量課金で使える
- CircleCI Config 2.1
config.yml
: 1462行 → 923行 に削減- Orbs 未導入
Workflow の並列度が高く,大規模に CircleCI を活用している事例だった.さらに Config 2.1 に移行して config.yml
を削減できたとのこと.発表にもあった通り,Orbs を導入すればもっと削減できそう.VPC を1日1回再構築する運用も Infrastructure as Code のお手本として素晴らしかった.
www.slideshare.net
Mercari Frontend の CircleCI 活用事例 @urahiroshi
- フロントエンドデプロイ
- 今までは CircleCI でテストだけを実施して,サーバでビルドをしていた
- CircleCI でビルドをして,Amazon S3 に保存するようにした
- サーバで Amazon S3 から .tar をダウンロードすれば動くようになった
- Storybook デプロイ
- プルリクエスト単位に Storybook を見れるように
- CircleCI で Amazon S3 に保存して,Amazon CloudFront からアクセスできるように
- プルリクエスト番号を取得するために
${CIRCLE_PULL_REQUEST}
を使う
- 脆弱性検知
npm audit
を CircleCI で Scheduling 実行している- 差分を取得するために前日の結果は CircleCI のキャッシュに保存している
urahiroshi/npm-audit
を Orbs 化した- GitHub - urahiroshi/orb-npm-audit: source code of urahiroshi/npm-audit orb
- https://circleci.com/orbs/registry/orb/urahiroshi/npm-audit
CircleCI と Amazon S3 を組み合わせてうまく CI / CD を実現している事例だった.場合によっては CircleCI Build Artifacts も使えるかも?と感じた.さらに npm audit
を Orbs 化して公開されているのも素晴らしかった.npm を使ってるリポジトリにさっそく導入してみる予定!
How Quipper Works with CircleCI
- アプリケーションもインフラも,ほぼ全てのリポジトリで CircleCI を CI / CD に使っている
- monorepo 構成
- 2000行を超える
config.yml
- サブディレクトリごとに変更を検知するシェルを実装して,全てのジョブが実行されないようにしている
- 2000行を超える
- CircleCI 関連ツール
- circle-ghc
- CircleCI の実行結果をプルリクエストにコメントする
- 現在 OSS になってなく,Rust 移植版の circle-gh-tee を作った
- GitHub - yuya-takeyama/circle-gh-tee: Command to run a command in Circle CI and post its result to GitHub Pull Request
- circleci-queue-to-datadog
- ジョブ状態をモニタリングして DataDog にメトリクスを保存する
- Performance Pricing Plan なら必要なし
- GitHub - yuya-takeyama/circleci-queue-to-datadog: Monitor CircleCI queue and save it as Datadog metrics
- circleci-env
- 環境変数を Infrastructure as Code 化する
- 秘密情報は HashiCorp Vault を使う
- アンドキュメントな API を使っているため非公開
- circle-ghc
monorepo だと全体的なビルド時間が長くなる点が大変そうだなと感じたけど,サブディレクトリごとに変更を検知する仕組みがあるのは良かった.CircleCI 関連ツールは興味深くて,さっそく circle-gh-tee を導入してみる.ここまで Infrastructure as Code 化できていると運用も安心してできそう.
CircleCI の Job 突然死と戦った話 @0gajun
- Performance Pricing Plan 最高
- 1ヶ月に 533,881分 = 1年 もビルドを実行している
resource_class
をmedium
→small
に変更したら多くのジョブが落ちるようになった- 具体的には
attach_workspace
が落ちるようになった - 原因は OOM Killer
- cgroup の
memory.max_usage_in_bytes
などを調査した attach_workspace
を実行しているときに page cache の増加が確認できた- コンテナだと page cache を削除する権限がなかった
- 具体的には
- 現在まだ根本解決になってなく
medium
を使っている
Performance Pricing Plan の resource_class
を変更したときに発生したエラー調査報告だった.活用事例だけではなく,調査事例も非常に参考になる.CircleCI サポートと連携して原因特定に奮闘しているプロセスも素晴らしく,さらに page cache の増加が確認できた段階に至るステップバイステップの調査内容も参考になった.根本解決になることを期待している!
(資料公開待ち)
CircleCI Orbsの紹介 @ks888sk
- Orbs 機能紹介
- Explore Orbs で Orbs を検索できる
- Good Practices
- 1 : 実行時間を見積もる
- 実行時間が長くなる場合に回避策を用意する
max-wait
オプションを実装した
- 2 : メッセージ部分を強調する
- 文字色を付ける
- 絵文字を付ける
- 3 : CI / CD
- Orbs を公開するためにも CircleCI を使う
- テスト用設定ファイルを使う
- 1 : 実行時間を見積もる
そろそろ Orbs を使おうと思っていたため,Good Practices を聞けたのは良かった.特に OSS だから使う側のシチュエーションを想定して max-wait
オプションを実装したという話は素晴らしい.紹介されていた h-matsuo/github-release
はさっそく導入してみる.
CircleCI オンプレ版 Builder インスタンスのスケールインの話
- CircleCI Server (Enterprise) では Builder インスタンスで Hashicorp Nomad が動いている
- Builder インスタンスを Auto Scaling するときに「減らすテクニック」が必要になる
- Nomad の drain API を実行する
- Nomad の allocations API を実行する
- Auto Scaling Lifecycle Hooks / SQS / Lambda を組み合わせて,Builder インスタンスを安全に停止している
個人的に CircleCI Server (Enterprise) の経験がなく,運用関連の話を聞けて良かった.実行中のプロセスに影響なくスケールインするためにはドレイニング機能が必須で,Nomad の API を使って実現しているのは CircleCI に限らず参考になる.
(資料公開待ち)
まとめ
- プライベートイベント「CircleCI Japan User Community Kickoff」に招待して頂いた
- 圧倒的に活用している人たちが集まっていたので,どの発表も素晴らしかった
- たまに「CircleCI Workflows ビューティフル選手権」に参加しているのかな?という気持ちになった(笑)
- 今後 CircleCI Japan User Community を盛り上げていくとのことで,応援!僕もできる限り参加したいと思う
ポッドキャスト
CircleCI のアーキテクチャ / 開発プロセスの話が聞けるポッドキャストもある!オススメ!
CircleCI Orbs ミニハッカソン
12/15 に Orbs リリースを記念したイベントが開催される.まだ参加できるので Orbs に興味がある人は参加すると良いのでは!
関連資料
builderscon 2018 の資料を見ると CircleCI / Nomad の詳細を知ることができる.合わせて読むと良さそう!