Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

3 My New Gear After Before 【材料費】 - 天板:16,200円 - スタンディングデスクの基盤: 48,100円 - 水性シリコン塗装 : 2000円 - コテバケ:1000円 - スポンジヤスリ: 300円×2 合計:66,900円

Slide 4

Slide 4 text

4 CircleCIで突然問題が!!! どうすれば・・・

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

7 1

Slide 8

Slide 8 text

8 なにもしていないの突然ビルドが止まった! 1. このビルドは schedule workflowで動作しており、前回のビルドと同じコ ミットを利用していた 2. 今まで同様のエラーメッセージは見たことがない 5. 利用しているExecutorは docker executor 3. 前回のビルドから何もプロジェクトの設定を変更していない 4. CircleCIのステータスはすべてOperationalである

Slide 9

Slide 9 text

9 Docker imageのshaを確認!

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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/

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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編)

Slide 16

Slide 16 text

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編)

Slide 17

Slide 17 text

17 サポートからの大事なお知らせ! 今週の火曜日からOOMの発生が増加しています Docker executorを動作させているMachineのLinux Kernelのアップデートに伴 いcgroupのメモリー制限の判定がより厳密になりました。

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

20 Webhookの通信をチェック 1. CircleCIはGithubやBitbucketの Webhookからイベントをトリガーしてビ ルドの起動等を行っている 2. Webhookでイベントが正常に送信され ているかチェック CircleCIがどのように機能しているか を知るにはこの動画がオススメ! https://www.youtube.com/watch?v=WL9RQ6fMle0

Slide 21

Slide 21 text

21 ~ ケース4~ 旧UIで直近2日のジョブが見えなくなった

Slide 22

Slide 22 text

22 Statusページを見よう

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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