名刺のデータ化システムを支えるCI基盤への取り組み/GEES and CircleCI

13d936e697fe0f4fa96f926d0a712f6c?s=47 Sansan
November 12, 2018

名刺のデータ化システムを支えるCI基盤への取り組み/GEES and CircleCI

■イベント
Sansan Builders Box 2018
https://jp.corp-sansan.com/sbb2018/

■登壇概要
タイトル:「名刺のデータ化システムを支えるCI基盤への取り組み」
登壇者:Data Strategy & Operation Center Development Group エンジニア 木田 悠一郎

▼Sansan Builders Box
https://buildersbox.corp-sansan.com/

13d936e697fe0f4fa96f926d0a712f6c?s=128

Sansan

November 12, 2018
Tweet

Transcript

  1. 名刺のデータ化システムを⽀える CI基盤への取り組み

  2. Sansan Builders Box Agenda - ⾃⼰紹介 - なぜ CI が必要なのか

    - GEES について - GEES が抱えていた問題 - CircleCI への移⾏⼿順 - CircleCI デバッグ⽅法 - まとめ
  3. ໦ా ༔Ұ࿠(Yuichiro Kida) ೥ ݄ ૣҴాେֶ ࣾձՊֶ෦ࣾձՊֶՊ ଔۀ ೥ ݄

    גࣜձࣾ෋࢜௨ιʔγΞϧαΠΤϯεϥϘϥτϦೖࣾ جװۀ຿γεςϜͷઃܭɾ։ൃɾςετ ೥ ݄ גࣜձࣾδϯδϟʔΞοϓೖࣾ γεςϜ։ൃձࣾʹग़޲͠ɺ3VCZPO3BJMTͰͷ։ൃ ೥ ݄ 4BOTBOגࣜձࣾೖࣾ &JHIUࣄۀ෦ʹͯϝϯγϣϯػೳͷ։ൃ ೥ ݄ %40$ʹҟಈ (&&4ʢ໊ࢗσʔλԽγεςϜʣͷ։ൃɾӡ༻ ৽نϓϩμΫτ։ൃ DSOC Development Group エンジニア
  4. なぜ CI が必要なのか

  5. Sansan Builders Box Continuous Integration ʢܧଓతΠϯςάϨʔγϣϯʣ ⇓ ܧଓతʹࣗಈςετΛ࣮ߦ͢Δ͜ͱ CI とは

  6. Sansan Builders Box ιϑτ΢ΣΞʹมߋΛՃ͑Δ౓ʹɺ ϦάϨογϣϯςετΛ ࣗಈͰߦ͏͜ͱ͕Ͱ͖Δ CI 導⼊のメリット

  7. Sansan Builders Box リグレッションテストを⾃動で⾏うことで 開発速度が向上する

  8. Sansan Builders Box リグレッションテストを毎回⾏うことで ソフトウェアのデグレを 防ぐことができる

  9. GEES について

  10. Sansan Builders Box GEES とは - 名刺のデータ化システム - Sansan と

    Eight の名刺のデータ化を担う - ⽉に数千万枚の名刺をデータ化している
  11. GEES が抱えていた問題

  12. Sansan Builders Box Jenkins ⾟い問題 - EC2 で⾃前でホスティング > サーバーのメンテナンスコストがかかる

    - テストがランダムで落ちる > 並⾏でテストを実⾏しているから?
  13. Sansan Builders Box Jenkins ⾟い問題 CI でテストを通すために 時間が取られていた

  14. Sansan Builders Box CircleCI のメリット - マネージドサービス > サーバーのメンテナンスが不要 -

    実⾏環境がコンテナで独⽴ > 平⾏でテストをしても安定するはず
  15. CircleCI への移⾏⼿順

  16. Sansan Builders Box 前提条件 - 他の CI ツールを使っているが、CircleCI への移⾏を検討している -

    ⾃動テストは書いているが、CI ツールは使っていない ※ ⾃動テストを導⼊していない場合、まず初めに、できるところから テストを⾃動化していきましょう。
  17. Sansan Builders Box CircleCI への移⾏⼿順 1. CircleCI へログインする > 移⾏したいリポジトリの権限がある

    GitHub アカウントが必要 2. CircleCI 上で設定する 3. リポジトリに 設定ファイルを追加する
  18. CircleCI 上での設定

  19. Sansan Builders Box CircleCI へログインする

  20. Sansan Builders Box Add Projects から Set Up Project をクリック

  21. Sansan Builders Box ⾔語を選択し、Start Building をクリック

  22. Sansan Builders Box Only build pull requests を On にする

    - デフォルトでは、PR を⽴てていないブランチも、 Push するたびにテストが⾛ってしまう - PR が出ているブランチに Push された時のみ、 テストが⾛るように変更する
  23. Sansan Builders Box Advanced Settings から Only build PRを On

    にする
  24. Sansan Builders Box user key が必要な場合 - 通常は⾃動で追加される deploy key

    だけで⼤丈夫 - プライベートリポジトリのライブラリを使⽤している場合は、 user key が必要 > 必要なリポジトリの Read 権限のみを持った GitHub ユーザーを作ると良い > このユーザーで CircleCI にログインし、Add user key する
  25. Sansan Builders Box Checkout SSH Keys から user key を追加する

  26. 設定ファイルの追加

  27. Sansan Builders Box 設定ファイルの追加 - .circleci/config.yml をリポジトリに追加する - 中⾝は CircleCI

    のサンプルを参考にする > Ruby の場合 https://circleci.com/docs/2.0/language-ruby/ - プロジェクトに合わせて設定を調整 - PR を出して、CircleCI 上でテストが通れば OK - ビルドに失敗しても、エラーメッセージを⾒て⼀つずつ解決していく
  28. GEES の設定例

  29. Sansan Builders Box MySQL 5.6 を使⽤ - 公式の Database Configuration

    Examples を参考 - `- image: circleci/mysql:5.6`
  30. Sansan Builders Box Redis を使⽤ - Redis のコンテナを追加する > `-

    image: circleci/redis:latest` - CircleCI 公式の Docker イメージは https://hub.docker.com/u/circleci/ から確認できる
  31. Sansan Builders Box ブラウザテストに PhantomJS を使⽤ - legacy が付いた PhantomJS

    ⼊りのイメージを使う > `- image: circleci/ruby:2.5.1-node-browsers- legacy` - 早く Headless Chrome に移⾏しましょう!
  32. CircleCI のデバッグ⼿法

  33. ローカルで CircleCI を実⾏する

  34. Sansan Builders Box ローカルで CircleCI を実⾏する - .circleci/config.yml を修正する度に Push

    して動作確認をするのは⼤変 - ローカルで確認してから、CircleCI 上で 確認する - Web+DB PRESS vol.107 が参考になります
  35. Sansan Builders Box Mac の場合 - インストール : `brew install

    --ignore-dependencies circleci` - Docker をインストールしていない場合 => `brew install circleci` - 設定ファイルのバリデーション : `circleci config validate` - ローカル実⾏ : ` circleci local execute `
  36. スクリーンショットを取って 確認する

  37. Sansan Builders Box CircleCI 上でもスクリーンショットを取って確認できる - ブラウザテストが CircleCI 上でのみ落ちる場合 -

    CircleCI 画⾯の Artifacts タブからスクリーン ショットを確認できる
  38. Sansan Builders Box Capybara の場合 - `save_screenshot nil, full: true`

    でフルサイズの スクリーンショットを取得できる - 指定しない場合、スクリーンショットは `tmp/capybara/` に保存される
  39. Sansan Builders Box スクリーンショットを Artifacts に保存する version: 2 jobs: build:

    parallelism: 3 docker: - image: circleci/ruby:2.5.1-node-browsers-legacy (略) steps: - checkout (略) - run: name: Run rspec in parallel command: | bundle exec rspec \ $(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) - store_artifacts: path: tmp/capybara/ .circleci/config/yml
  40. Sansan Builders Box CircleCI 上の Aritifacts タブから確認できる

  41. CircleCI のコンテナに SSH 接続する

  42. Sansan Builders Box CircleCI のコンテナに SSH 接続する - ビルド画⾯右上の Rerun

    job with SSH をクリック - `ssh -p xxxxx xxx.xxx.xxx.xxx` と表⽰される
  43. Sansan Builders Box CircleCI のコンテナに SSH 接続する - ターミナルから SSH

    接続できる > GitHub に登録している秘密鍵を指定する $ ssh -p xxxxx xxx.xxx.xxx.xxx -i ~/.ssh/id_rsa_github
  44. まとめ

  45. Sansan Builders Box まとめ - CI によってデグレを防ぎ、開発速度を上げる - CircleCI 移⾏のコツ

    > 設定ファイルは公式サンプルを参考 > まずはローカルでビルドしてデバッグする > エラーは⼀つずつ潰してく > CircleCI 上のエラーは SSH 接続やスクリーンショットで確認する
  46. None