$30 off During Our Annual Pro Sale. View Details »

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

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/

Sansan

November 12, 2018
Tweet

More Decks by Sansan

Other Decks in Technology

Transcript

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

    View Slide

  2. Sansan Builders Box
    Agenda
    - ⾃⼰紹介
    - なぜ CI が必要なのか
    - GEES について
    - GEES が抱えていた問題
    - CircleCI への移⾏⼿順
    - CircleCI デバッグ⽅法
    - まとめ

    View Slide

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

    View Slide

  4. なぜ CI が必要なのか

    View Slide

  5. Sansan Builders Box
    Continuous Integration
    ʢܧଓతΠϯςάϨʔγϣϯʣ

    ܧଓతʹࣗಈςετΛ࣮ߦ͢Δ͜ͱ
    CI とは

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. GEES について

    View Slide

  10. Sansan Builders Box
    GEES とは
    - 名刺のデータ化システム
    - Sansan と Eight の名刺のデータ化を担う
    - ⽉に数千万枚の名刺をデータ化している

    View Slide

  11. GEES が抱えていた問題

    View Slide

  12. Sansan Builders Box
    Jenkins ⾟い問題
    - EC2 で⾃前でホスティング
    > サーバーのメンテナンスコストがかかる
    - テストがランダムで落ちる
    > 並⾏でテストを実⾏しているから?

    View Slide

  13. Sansan Builders Box
    Jenkins ⾟い問題
    CI でテストを通すために
    時間が取られていた

    View Slide

  14. Sansan Builders Box
    CircleCI のメリット
    - マネージドサービス
    > サーバーのメンテナンスが不要
    - 実⾏環境がコンテナで独⽴
    > 平⾏でテストをしても安定するはず

    View Slide

  15. CircleCI への移⾏⼿順

    View Slide

  16. Sansan Builders Box
    前提条件
    - 他の CI ツールを使っているが、CircleCI への移⾏を検討している
    - ⾃動テストは書いているが、CI ツールは使っていない
    ※ ⾃動テストを導⼊していない場合、まず初めに、できるところから
    テストを⾃動化していきましょう。

    View Slide

  17. Sansan Builders Box
    CircleCI への移⾏⼿順
    1. CircleCI へログインする
    > 移⾏したいリポジトリの権限がある GitHub アカウントが必要
    2. CircleCI 上で設定する
    3. リポジトリに 設定ファイルを追加する

    View Slide

  18. CircleCI 上での設定

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  23. Sansan Builders Box
    Advanced Settings から Only build PRを On にする

    View Slide

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

    View Slide

  25. Sansan Builders Box
    Checkout SSH Keys から user key を追加する

    View Slide

  26. 設定ファイルの追加

    View Slide

  27. Sansan Builders Box
    設定ファイルの追加
    - .circleci/config.yml をリポジトリに追加する
    - 中⾝は CircleCI のサンプルを参考にする
    > Ruby の場合 https://circleci.com/docs/2.0/language-ruby/
    - プロジェクトに合わせて設定を調整
    - PR を出して、CircleCI 上でテストが通れば OK
    - ビルドに失敗しても、エラーメッセージを⾒て⼀つずつ解決していく

    View Slide

  28. GEES の設定例

    View Slide

  29. Sansan Builders Box
    MySQL 5.6 を使⽤
    - 公式の Database Configuration Examples
    を参考
    - `- image: circleci/mysql:5.6`

    View Slide

  30. Sansan Builders Box
    Redis を使⽤
    - Redis のコンテナを追加する
    > `- image: circleci/redis:latest`
    - CircleCI 公式の Docker イメージは
    https://hub.docker.com/u/circleci/ から確認できる

    View Slide

  31. Sansan Builders Box
    ブラウザテストに PhantomJS を使⽤
    - legacy が付いた PhantomJS ⼊りのイメージを使う
    > `- image: circleci/ruby:2.5.1-node-browsers-
    legacy`
    - 早く Headless Chrome に移⾏しましょう!

    View Slide

  32. CircleCI のデバッグ⼿法

    View Slide

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

    View Slide

  34. Sansan Builders Box
    ローカルで CircleCI を実⾏する
    - .circleci/config.yml を修正する度に
    Push して動作確認をするのは⼤変
    - ローカルで確認してから、CircleCI 上で
    確認する
    - Web+DB PRESS vol.107 が参考になります

    View Slide

  35. Sansan Builders Box
    Mac の場合
    - インストール : `brew install --ignore-dependencies circleci`
    - Docker をインストールしていない場合 => `brew install circleci`
    - 設定ファイルのバリデーション : `circleci config validate`
    - ローカル実⾏ : ` circleci local execute `

    View Slide

  36. スクリーンショットを取って
    確認する

    View Slide

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

    View Slide

  38. Sansan Builders Box
    Capybara の場合
    - `save_screenshot nil, full: true` でフルサイズの
    スクリーンショットを取得できる
    - 指定しない場合、スクリーンショットは
    `tmp/capybara/` に保存される

    View Slide

  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

    View Slide

  40. Sansan Builders Box
    CircleCI 上の Aritifacts タブから確認できる

    View Slide

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

    View Slide

  42. Sansan Builders Box
    CircleCI のコンテナに SSH 接続する
    - ビルド画⾯右上の Rerun job with SSH
    をクリック
    - `ssh -p xxxxx xxx.xxx.xxx.xxx` と表⽰される

    View Slide

  43. Sansan Builders Box
    CircleCI のコンテナに SSH 接続する
    - ターミナルから SSH 接続できる
    > GitHub に登録している秘密鍵を指定する
    $ ssh -p xxxxx xxx.xxx.xxx.xxx -i ~/.ssh/id_rsa_github

    View Slide

  44. まとめ

    View Slide

  45. Sansan Builders Box
    まとめ
    - CI によってデグレを防ぎ、開発速度を上げる
    - CircleCI 移⾏のコツ
    > 設定ファイルは公式サンプルを参考
    > まずはローカルでビルドしてデバッグする
    > エラーは⼀つずつ潰してく
    > CircleCI 上のエラーは SSH 接続やスクリーンショットで確認する

    View Slide

  46. View Slide