Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Circle CI 入門

Circle CI 入門

サポーターズ勉強会 2018/03/19
Circle CI 入門

https://supporterzcolab.com/event/318/

9a71d9081335ef7d5ecfa86155c949af?s=128

yutachaos

March 19, 2018
Tweet

Transcript

  1. Circle CI 入門 1

  2. 自己紹介 木村 勇太 サー バー サイドエンジニア プログラミング言語 PHP, node, java

    , Ruby 主にAWS を使ったシステム構築してます。 実装、 開発、 インフラ構 築とかわりかし何でも屋。 2
  3. 近況 AWS Certified Solutions Architect, AWS Certified DevOps Engineer Professional

    取りました。 Qiita 記事に書いてます。 https://qiita.com/yutaChaos/items/2b0b8d9bfe76a597953c https://qiita.com/yutaChaos/items/081ac5b067856206a2a3 3
  4. Agenda CI( 継続的インテグレー ション) とは? Circle CI の紹介 サンプルコー ドの解説

    他のCI ツー ルの紹介 CI 構築する時に私が考えること 4
  5. CI is 何? 5

  6. 継続的インテグレー ション、CI( 英: continuous integration) と は、 主にプログラマー のアプリケー ション作成時の品質改善や納期

    の短縮のための習慣のことである。 エクストリー ム・ プログラミン グ (XP) のプラクティスの一つで、 狭義にはビルドやテスト、 イン スペクションなどを継続的に実行していくことを意味する (by wikipedia 先生) 6
  7. CI はエクストリー ム・ プログラミングのプラクティスの 一つ。 7

  8. エクストリー ム・ プログラミング is 何? 8

  9. エクストリー ム・ プログラミング、XP( 英: extreme programming) は、 ケント・ ベックらによって定式化され、 提唱さ

    れているソフトウェア開発手法である。 柔軟性の高い開発手法であ るため、 難易度の高い開発やビジネス上の要求が刻々 と変わるよう な状況に向いた開発手法である。 事前計画よりも柔軟性を重視す る。1999 年に書籍『XP エクストリー ム・ プログラミング入門― ソ フトウェア開発の究極の手法』 によって発表された。XP は、 軽量開 発手法あるいはアジャイルソフトウェア開発手法と呼ばれる、 同種 の開発手法のなかで代表的なものである。 (by wikipedia 先生) 9
  10. 具体的にはCI は開発のプラクティスに含まれている 10

  11. テスト駆動開発 テストコー ドを書きつつ、 機能の実装を行い、 常にコー ドに対して テストコー ドによる自動テストを行うように開発する手法 ペア・ プログラミング

    Observer( 指示する人),Driver( プログラミングを実際に書く人) の二 人組になってプログラミングを行う手法 11
  12. リファクタリング 書いたコー ドの内容を修正・ 改善を行うこと 集団的な所有権 git やsvn などのVCS( バー ジョン管理システム)

    を使い、 誰でも同じ コー ドを編集出来るようにする CI( 継続的インテグレー ション) ← これ! 作成したテスト、 ソー スのビルドやデプロイ、 自動で実行される環 境を作る YAGNI(You ain't gonna need it) 機能は必要になるまで実装しない 12
  13. エクストリー ム・ プログラミングでは出来るだけ小さい単位で開発 を行い、 細かい単位でのフィー ドバックをするように提唱されてい ます。 テストコー ドを作成しつつ開発する場合、 テスト実行を毎回ロー

    カ ルで行うのは大変。 自動化することによって実行コストを下げて、 より早くフィー ドバ ックを行おう! というのがCI です。( ざっくり) 13
  14. Circle CI について 14

  15. CI を行う環境を提供してくれるSaaS。 同種で最近流行りなもの に T r a v i s

    C I , W e r c k e r とか色々 あります。 すごいたくさんある ので多くは語りません。 15
  16. 何が出来るの? 16

  17. A. 基本的になんでも出来ます。 17

  18. Circle CI が提供してくれること 公式からのコピペ& 翻訳(https://circleci.com/product/) 18

  19. VCS との連携 CircleCI は、GitHub、GitHub Enterprise、 およびBitbucket と統合さ れています。 コー ドをコミットするたびにCircleCI

    はビルドを作成 します 自動テスト CircleCI は、 コンテナまたは仮想マシンでビルドを自動的にテスト します。 19
  20. 通知 ビルドに失敗した場合にチー ムに通知されるので、 問題を迅速に解 決できます。 自動デプロイ 成功したビルドはさまざまな環境にデプロイされ、 あなたのプロダ クトはより早く市場に投入されます。 20

  21. 料金 1 コンテナ一月につき1500 分まで無料。 コンテナを追加する場合は50 ドル/ 月 21

  22. ユー スケー ス テストの実行、 アプリケー ションのデプロイ、 アプリのビルド etc・・・ 22

  23. サンプルコー ド 公式のyml ファイルを少しいじってruby で書きました。 https://github.com/yutachaos/circleci‑initial 23

  24. 使い方 GitHub、Bitbucket で管理されたrepository を用意します。 circleCI の設定ファイルを用意します。( 後述) CircleCI とVCS を連携します。

    git にpush します Circle CI が動いてテストが動きます。 以上 24
  25. yml ファイルの解説 version Circle CI のversion 1 と2 がある。1 は2018

    年8 月に終了することがア ナウンスされているので、 基本的にいまから使うには2 が推奨 jobs job を定義する箇所の上位定義 docker 実行環境をdocker で行う場合の定義部分 image コンテナの実行イメー ジを指定する Docker hub,private repository, ECR,circleCI の公式イメー ジな ど使用出来る circleci/ruby:2.4‑node 25
  26. environment 該当のjob の中で利用出来る環境変数を記載する。 steps job の中で実行されるコマンドを記載していく。 run 実行するコマンドを記載していく name 実行するコマンドの説明、CircleCI

    の画面に表示される。 必須項目 ではないが設定してあったほうが見やすい command 実行するコマンド、sh のファイルなどを設定することが出来る。 26
  27. save_cache CircleCI はjob にデー タをキャッシュすることが出来る指定したkey ででbundle やnode_modules などの依存するライブラリをキャッシ ュすることで次回build 時に採用することが可能

    restore_cache save_cache で保存したキャッシュを読み込み直して、 再利用するこ とが出来る。 store_test_results テストの実行結果(JUnit XML or Cucumber JSON) をここで指定し たpath の下に置くことでCircleCI のUI からtest の実行結果を確認する こと出来る。 workflow workflow に記載する、job の並行実行や、 実行する条件を設定する ことが出来る。 27
  28. 他のCI ツー ルの紹介 最近はSaas でも、 自前で入れて使う形でもたくさんのCI ツー ルがあ ります。 たくさんあるので少しでも触ったものだけを書きます

    (><) Jenkins Jenkins おじさん。 通常自前のサー バー にいれて使うことが多 い。 老舗だが、 実績と使用率はNo1 といえる。Jenkins2 から出 来るようになったpipeline が結構便利 最近はSaas 版もある。 CircleCI やDocker もCI はJenkins で回さ れている。 TravisCI 最近のイケイケな会社はCircleCI かTravisCI というイメー ジ。 private で使うためには有料プランが必要。public で使う場合は 無料でOSS での使用例が多いのでサンプルを探しやすくもあ る。 28
  29. GitLabCI gitlab に連携出来るCI ツー ル。gitlab 本体とは別にserver を容易 し、runner として実行出来る。 Bitrise

    iOS 向けのCI ツー ル。 同僚エンジニアいわく結構使いやすい。 無料枠がやや貧弱だが、50 ドルからの有料枠なので、 頻繁に ビルドするのであれば便利。 Concourse Go 製のCI ツー ル、 最近流行っている。Saas ではなく自前で環 境を容易する。Container 環境での実行、pipeline ベー スの構築 が出来るので大規模な処理を纏めるのに適している印象。 29
  30. CI ツー ルは結構なんでも出来る。 だからどの くらいではじめるかが重要 30

  31. CI 構築する時に私が考えること 31

  32. 目的・ どういうことをやるかを考える 例 コー ドに統一感をもたせたい lint を行う コー ドの不具合を素早く検出したい 単体テストを行う

    要件にあったもの他との依存性を調べたい 結合テストを行う ライブラリを常に最新にするのがめんどい 日時でbundle のupdate を行う CI 回すのかっこいいから、 やりたい! この理由もありだけど、 何やるかはちゃんと決めよう 32
  33. どのツー ルを使うのか考える チー ムで使っているバー ジョン管理システムを調べる git github gitlab gitbucket codeCommit

    etc・・・ svn cvn 33
  34. Saas のCI を考慮する場合、 使っているツー ルによって連携のしやす さが異なる github 使ってる、gitlab 使っているでも設定する所が異なる。 (github

    ならすぐ連携出来るよ!) CircleCI の場合( というか一般的なSaas の場合) 一度インター ネット 経由で接続するため、private なネットワー ク限定でしかセキュリテ ィポリシー が定められている場合、 基本的に導入が困難。 自前で入れられるツー ル(Jenkins など) を利用した場合が良い時もあ る。 34
  35. 粒度を考える CI を動かす粒度を考える push ごとに動かす PR 毎に動かす master にpush されたときに動かすなど

    時間での定期実行する(cron 的設定も出来ます) 35
  36. CI を設定するコストメリットを考える 単体テストや結合テストを常に実行する設定は有用であるが、 設定 するコストが多い。 まずはlint だけを設定するところから始めるのも1つの考え方となる 効果と設定へのコストは得てして反比例しがち CI は設定したけど、

    テストをメンテするのが大変になっ た・・・ CI 自体が一人にしか設定出来なくて動かなくなった時につら い。 インフラの設定とかが属人化しやすい(Jenkins おじさん管理お じさんの誕生) 36
  37. まとめ Docker でやるから環境依存解決楽、Docker かわいい よ、Docker Saas だから、 インフラ維持コスト少ない。 CI 回すと便利だけど、

    一気にやると大変だから、 少しず つやろう。 37
  38. CI 回して早いCycle を回そう!!! 38

  39. ありがとうございました! 39