■イベント 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/
名刺のデータ化システムを⽀えるCI基盤への取り組み
View Slide
Sansan Builders BoxAgenda- ⾃⼰紹介- なぜ CI が必要なのか- GEES について- GEES が抱えていた問題- CircleCI への移⾏⼿順- CircleCI デバッグ⽅法- まとめ
ా ༔Ұ(Yuichiro Kida) ݄ ૣҴాେֶ ࣾձՊֶ෦ࣾձՊֶՊ ଔۀ ݄ גࣜձࣾ࢜௨ιʔγΞϧαΠΤϯεϥϘϥτϦೖࣾجװۀγεςϜͷઃܭɾ։ൃɾςετ ݄ גࣜձࣾδϯδϟʔΞοϓೖࣾγεςϜ։ൃձࣾʹग़͠ɺ3VCZPO3BJMTͰͷ։ൃ ݄ 4BOTBOגࣜձࣾೖࣾ&JHIUࣄۀ෦ʹͯϝϯγϣϯػೳͷ։ൃ ݄ %40$ʹҟಈ(&&4ʢ໊σʔλԽγεςϜʣͷ։ൃɾӡ༻৽نϓϩμΫτ։ൃDSOC Development Group エンジニア
なぜ CI が必要なのか
Sansan Builders BoxContinuous IntegrationʢܧଓతΠϯςάϨʔγϣϯʣ⇓ܧଓతʹࣗಈςετΛ࣮ߦ͢Δ͜ͱCI とは
Sansan Builders BoxιϑτΣΞʹมߋΛՃ͑ΔʹɺϦάϨογϣϯςετΛࣗಈͰߦ͏͜ͱ͕Ͱ͖ΔCI 導⼊のメリット
Sansan Builders Boxリグレッションテストを⾃動で⾏うことで開発速度が向上する
Sansan Builders Boxリグレッションテストを毎回⾏うことでソフトウェアのデグレを防ぐことができる
GEES について
Sansan Builders BoxGEES とは- 名刺のデータ化システム- Sansan と Eight の名刺のデータ化を担う- ⽉に数千万枚の名刺をデータ化している
GEES が抱えていた問題
Sansan Builders BoxJenkins ⾟い問題- EC2 で⾃前でホスティング> サーバーのメンテナンスコストがかかる- テストがランダムで落ちる> 並⾏でテストを実⾏しているから?
Sansan Builders BoxJenkins ⾟い問題CI でテストを通すために時間が取られていた
Sansan Builders BoxCircleCI のメリット- マネージドサービス> サーバーのメンテナンスが不要- 実⾏環境がコンテナで独⽴> 平⾏でテストをしても安定するはず
CircleCI への移⾏⼿順
Sansan Builders Box前提条件- 他の CI ツールを使っているが、CircleCI への移⾏を検討している- ⾃動テストは書いているが、CI ツールは使っていない※ ⾃動テストを導⼊していない場合、まず初めに、できるところからテストを⾃動化していきましょう。
Sansan Builders BoxCircleCI への移⾏⼿順1. CircleCI へログインする> 移⾏したいリポジトリの権限がある GitHub アカウントが必要2. CircleCI 上で設定する3. リポジトリに 設定ファイルを追加する
CircleCI 上での設定
Sansan Builders BoxCircleCI へログインする
Sansan Builders BoxAdd Projects から Set Up Project をクリック
Sansan Builders Box⾔語を選択し、Start Building をクリック
Sansan Builders BoxOnly build pull requests を On にする- デフォルトでは、PR を⽴てていないブランチも、Push するたびにテストが⾛ってしまう- PR が出ているブランチに Push された時のみ、テストが⾛るように変更する
Sansan Builders BoxAdvanced Settings から Only build PRを On にする
Sansan Builders Boxuser key が必要な場合- 通常は⾃動で追加される deploy key だけで⼤丈夫- プライベートリポジトリのライブラリを使⽤している場合は、 userkey が必要> 必要なリポジトリの Read 権限のみを持った GitHub ユーザーを作ると良い> このユーザーで CircleCI にログインし、Add user key する
Sansan Builders BoxCheckout SSH Keys から user key を追加する
設定ファイルの追加
Sansan Builders Box設定ファイルの追加- .circleci/config.yml をリポジトリに追加する- 中⾝は CircleCI のサンプルを参考にする> Ruby の場合 https://circleci.com/docs/2.0/language-ruby/- プロジェクトに合わせて設定を調整- PR を出して、CircleCI 上でテストが通れば OK- ビルドに失敗しても、エラーメッセージを⾒て⼀つずつ解決していく
GEES の設定例
Sansan Builders BoxMySQL 5.6 を使⽤- 公式の Database Configuration Examplesを参考- `- image: circleci/mysql:5.6`
Sansan Builders BoxRedis を使⽤- Redis のコンテナを追加する> `- image: circleci/redis:latest`- CircleCI 公式の Docker イメージはhttps://hub.docker.com/u/circleci/ から確認できる
Sansan Builders Boxブラウザテストに PhantomJS を使⽤- legacy が付いた PhantomJS ⼊りのイメージを使う> `- image: circleci/ruby:2.5.1-node-browsers-legacy`- 早く Headless Chrome に移⾏しましょう!
CircleCI のデバッグ⼿法
ローカルで CircleCI を実⾏する
Sansan Builders Boxローカルで CircleCI を実⾏する- .circleci/config.yml を修正する度にPush して動作確認をするのは⼤変- ローカルで確認してから、CircleCI 上で確認する- Web+DB PRESS vol.107 が参考になります
Sansan Builders BoxMac の場合- インストール : `brew install --ignore-dependencies circleci`- Docker をインストールしていない場合 => `brew install circleci`- 設定ファイルのバリデーション : `circleci config validate`- ローカル実⾏ : ` circleci local execute `
スクリーンショットを取って確認する
Sansan Builders BoxCircleCI 上でもスクリーンショットを取って確認できる- ブラウザテストが CircleCI 上でのみ落ちる場合- CircleCI 画⾯の Artifacts タブからスクリーンショットを確認できる
Sansan Builders BoxCapybara の場合- `save_screenshot nil, full: true` でフルサイズのスクリーンショットを取得できる- 指定しない場合、スクリーンショットは`tmp/capybara/` に保存される
Sansan Builders Boxスクリーンショットを Artifacts に保存するversion: 2jobs:build:parallelism: 3docker:- image: circleci/ruby:2.5.1-node-browsers-legacy(略)steps:- checkout(略)- run:name: Run rspec in parallelcommand: |bundle exec rspec \$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)- store_artifacts:path: tmp/capybara/.circleci/config/yml
Sansan Builders BoxCircleCI 上の Aritifacts タブから確認できる
CircleCI のコンテナにSSH 接続する
Sansan Builders BoxCircleCI のコンテナに SSH 接続する- ビルド画⾯右上の Rerun job with SSHをクリック- `ssh -p xxxxx xxx.xxx.xxx.xxx` と表⽰される
Sansan Builders BoxCircleCI のコンテナに SSH 接続する- ターミナルから SSH 接続できる> GitHub に登録している秘密鍵を指定する$ ssh -p xxxxx xxx.xxx.xxx.xxx -i ~/.ssh/id_rsa_github
まとめ
Sansan Builders Boxまとめ- CI によってデグレを防ぎ、開発速度を上げる- CircleCI 移⾏のコツ> 設定ファイルは公式サンプルを参考> まずはローカルでビルドしてデバッグする> エラーは⼀つずつ潰してく> CircleCI 上のエラーは SSH 接続やスクリーンショットで確認する