$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. Sansan Builders Box Agenda - ⾃⼰紹介 - なぜ CI が必要なのか

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

    גࣜձࣾ෋࢜௨ιʔγΞϧαΠΤϯεϥϘϥτϦೖࣾ جװۀ຿γεςϜͷઃܭɾ։ൃɾςετ ೥ ݄ גࣜձࣾδϯδϟʔΞοϓೖࣾ γεςϜ։ൃձࣾʹग़޲͠ɺ3VCZPO3BJMTͰͷ։ൃ ೥ ݄ 4BOTBOגࣜձࣾೖࣾ &JHIUࣄۀ෦ʹͯϝϯγϣϯػೳͷ։ൃ ೥ ݄ %40$ʹҟಈ (&&4ʢ໊ࢗσʔλԽγεςϜʣͷ։ൃɾӡ༻ ৽نϓϩμΫτ։ൃ DSOC Development Group エンジニア
  3. Sansan Builders Box GEES とは - 名刺のデータ化システム - Sansan と

    Eight の名刺のデータ化を担う - ⽉に数千万枚の名刺をデータ化している
  4. Sansan Builders Box Jenkins ⾟い問題 - EC2 で⾃前でホスティング > サーバーのメンテナンスコストがかかる

    - テストがランダムで落ちる > 並⾏でテストを実⾏しているから?
  5. Sansan Builders Box CircleCI のメリット - マネージドサービス > サーバーのメンテナンスが不要 -

    実⾏環境がコンテナで独⽴ > 平⾏でテストをしても安定するはず
  6. Sansan Builders Box 前提条件 - 他の CI ツールを使っているが、CircleCI への移⾏を検討している -

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

    GitHub アカウントが必要 2. CircleCI 上で設定する 3. リポジトリに 設定ファイルを追加する
  8. Sansan Builders Box Only build pull requests を On にする

    - デフォルトでは、PR を⽴てていないブランチも、 Push するたびにテストが⾛ってしまう - PR が出ているブランチに Push された時のみ、 テストが⾛るように変更する
  9. Sansan Builders Box user key が必要な場合 - 通常は⾃動で追加される deploy key

    だけで⼤丈夫 - プライベートリポジトリのライブラリを使⽤している場合は、 user key が必要 > 必要なリポジトリの Read 権限のみを持った GitHub ユーザーを作ると良い > このユーザーで CircleCI にログインし、Add user key する
  10. Sansan Builders Box 設定ファイルの追加 - .circleci/config.yml をリポジトリに追加する - 中⾝は CircleCI

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

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

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

    ⼊りのイメージを使う > `- image: circleci/ruby:2.5.1-node-browsers- legacy` - 早く Headless Chrome に移⾏しましょう!
  14. Sansan Builders Box ローカルで CircleCI を実⾏する - .circleci/config.yml を修正する度に Push

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

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

    でフルサイズの スクリーンショットを取得できる - 指定しない場合、スクリーンショットは `tmp/capybara/` に保存される
  17. 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
  18. Sansan Builders Box CircleCI のコンテナに SSH 接続する - ビルド画⾯右上の Rerun

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

    接続できる > GitHub に登録している秘密鍵を指定する $ ssh -p xxxxx xxx.xxx.xxx.xxx -i ~/.ssh/id_rsa_github
  20. Sansan Builders Box まとめ - CI によってデグレを防ぎ、開発速度を上げる - CircleCI 移⾏のコツ

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