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

CircleCIのサポートが実践するデバッグ方法 / The way to debug the builds as practiced by CircleCI support

37ba0badd32d848a07bf7a6c0e1f5344?s=47 Taka
June 03, 2020

CircleCIのサポートが実践するデバッグ方法 / The way to debug the builds as practiced by CircleCI support

2020年6月3日
【オンライン】【最強CircleCI利用術編】CircleCI ユーザーコミュニティミートアップで発表したスライドです。

ケース別に紹介しています。デバックする際の参考にしてみてください。

37ba0badd32d848a07bf7a6c0e1f5344?s=128

Taka

June 03, 2020
Tweet

Transcript

  1. 1 CircleCIのサポートが実践するビ ルドのデバッグ 2020年6月3日【最強CircleCI利用術編】 CircleCI ユーザーコミュニティミートアップOnline CircleCI Japan Takayuki Ito

    @ Support Engineer
  2. 2 名前:Taka アカウント名: @ganezasan (Twitter, Github) サポートエンジニア 自己紹介

  3. 3 My New Gear After Before 【材料費】 - 天板:16,200円 -

    スタンディングデスクの基盤: 48,100円 - 水性シリコン塗装 : 2000円 - コテバケ:1000円 - スポンジヤスリ: 300円×2 合計:66,900円
  4. 4 CircleCIで突然問題が!!! どうすれば・・・

  5. 5 サポートが普段チェックしている デバッグのポイントを紹介!!! 今日話すこと!

  6. 6 ~ ケース1~ なにもしていないの突然ビルドが止まった!

  7. 7 1

  8. 8 なにもしていないの突然ビルドが止まった! 1. このビルドは schedule workflowで動作しており、前回のビルドと同じコ ミットを利用していた 2. 今まで同様のエラーメッセージは見たことがない 5.

    利用しているExecutorは docker executor 3. 前回のビルドから何もプロジェクトの設定を変更していない 4. CircleCIのステータスはすべてOperationalである
  9. 9 Docker imageのshaを確認!

  10. 10 circleci/<image name>で提供している Dockerイメージは各言語やミドルウェアが 提供しているDockerfileをインポートしてい る CircleCI側で何か変更したのでは? https://github.com/CircleCI-Public/circleci-dockerfiles/blob/master/mysql/images/5.7.30/Dockerfile

  11. 11 cimg/<?> 2020年6月3日時点では以下の言語、ミドルウェアを用意 Go,elixir,node,python,php,ruby,rust, openjdk,clojure,mariadb,android そこでより安定とキャッシュ効率を考えた CircleCIの次世代convenience image 詳しくはこちら https://circleci.com/blog/designing-a-package-manager-from-the-ground-up/

  12. 12 ~ ケース2~ 時々ビルドが失敗する

  13. 13 1. 3回に1回程度ビルドが失敗する 2. ExecutorはDocker executorを利用している 3. Androidアプリのビルドを行っている 4. エラーコードが137

    時々ビルドが失敗する
  14. 14 1. JVMを利用するビルドでは環境変数で メモリーを制御する必要がある 2. 環境変数には優先順位があるが _JAVA_OPTIONSは最強! 3. CI上ではGradleの場合、--no-daemon と--max-workersを設定しよう

    OOMを疑う!(JVM編) https://circleci.com/docs/2.0/java-oom/#using-java-enviro nment-variables-to-set-memory-limits
  15. 15 1. パッケージによってはworker数をCPU数から計算 するものがある a. Docker Executorの物理マシン上には沢山のリソースがあ り、通常 Docker executorのリソースはcgroup

    というlinux カーネルの機能で制御しているが、いくつかのパッケージ では物理マシンのCPU数を確認している b. 代表例 i. Webpack 4 ii. Fork-ts-checker-webpack-plugin 2. ヒープのメモリ容量の設定 a. --max_old_space_size 物理マシンのCPU数  → 36 OOMを疑う!(Node.js編)
  16. 16 webpack4の場合 minimizerにterser-webpack-pluginを利用しており、 terser-webpack-pluginのデフォルトのparallelオプションがマシンの CPU数(os.cpus().length - 1) https://webpack.js.org/configuration/optimization/#optimizationminimizer https://webpack.js.org/plugins/terser-webpack-plugin/#parallel Parallelオプションの設定例

    https://gist.github.com/ganezasan/1b0ffa09386c331d1f77ea568448f75a OOMを疑う!(Node.js編)
  17. 17 サポートからの大事なお知らせ! 今週の火曜日からOOMの発生が増加しています Docker executorを動作させているMachineのLinux Kernelのアップデートに伴 いcgroupのメモリー制限の判定がより厳密になりました。

  18. 18 ~ ケース3~ commit したのにビルドが開始されない

  19. 19 1. コミット以外なにもしていない commit したのにビルドが開始されない

  20. 20 Webhookの通信をチェック 1. CircleCIはGithubやBitbucketの Webhookからイベントをトリガーしてビ ルドの起動等を行っている 2. Webhookでイベントが正常に送信され ているかチェック CircleCIがどのように機能しているか

    を知るにはこの動画がオススメ! https://www.youtube.com/watch?v=WL9RQ6fMle0
  21. 21 ~ ケース4~ 旧UIで直近2日のジョブが見えなくなった

  22. 22 Statusページを見よう

  23. 23 それでも解決しない場合

  24. 24 CircleCIサポートへ ご連絡くださいー! https://support.circleci.com/hc/ja/requests/new

  25. Thank you. 25 ありがとうございました。