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/

yutachaos

March 19, 2018
Tweet

More Decks by yutachaos

Other Decks in Technology

Transcript

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

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

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

    他のCI ツー ルの紹介 CI 構築する時に私が考えること 4
  4. 継続的インテグレー ション、CI( 英: continuous integration) と は、 主にプログラマー のアプリケー ション作成時の品質改善や納期

    の短縮のための習慣のことである。 エクストリー ム・ プログラミン グ (XP) のプラクティスの一つで、 狭義にはビルドやテスト、 イン スペクションなどを継続的に実行していくことを意味する (by wikipedia 先生) 6
  5. エクストリー ム・ プログラミング、XP( 英: extreme programming) は、 ケント・ ベックらによって定式化され、 提唱さ

    れているソフトウェア開発手法である。 柔軟性の高い開発手法であ るため、 難易度の高い開発やビジネス上の要求が刻々 と変わるよう な状況に向いた開発手法である。 事前計画よりも柔軟性を重視す る。1999 年に書籍『XP エクストリー ム・ プログラミング入門― ソ フトウェア開発の究極の手法』 によって発表された。XP は、 軽量開 発手法あるいはアジャイルソフトウェア開発手法と呼ばれる、 同種 の開発手法のなかで代表的なものである。 (by wikipedia 先生) 9
  6. リファクタリング 書いたコー ドの内容を修正・ 改善を行うこと 集団的な所有権 git やsvn などのVCS( バー ジョン管理システム)

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

    カ ルで行うのは大変。 自動化することによって実行コストを下げて、 より早くフィー ドバ ックを行おう! というのがCI です。( ざっくり) 13
  8. CI を行う環境を提供してくれるSaaS。 同種で最近流行りなもの に T r a v i s

    C I , W e r c k e r とか色々 あります。 すごいたくさんある ので多くは語りません。 15
  9. VCS との連携 CircleCI は、GitHub、GitHub Enterprise、 およびBitbucket と統合さ れています。 コー ドをコミットするたびにCircleCI

    はビルドを作成 します 自動テスト CircleCI は、 コンテナまたは仮想マシンでビルドを自動的にテスト します。 19
  10. 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
  11. environment 該当のjob の中で利用出来る環境変数を記載する。 steps job の中で実行されるコマンドを記載していく。 run 実行するコマンドを記載していく name 実行するコマンドの説明、CircleCI

    の画面に表示される。 必須項目 ではないが設定してあったほうが見やすい command 実行するコマンド、sh のファイルなどを設定することが出来る。 26
  12. 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
  13. 他のCI ツー ルの紹介 最近はSaas でも、 自前で入れて使う形でもたくさんのCI ツー ルがあ ります。 たくさんあるので少しでも触ったものだけを書きます

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

    iOS 向けのCI ツー ル。 同僚エンジニアいわく結構使いやすい。 無料枠がやや貧弱だが、50 ドルからの有料枠なので、 頻繁に ビルドするのであれば便利。 Concourse Go 製のCI ツー ル、 最近流行っている。Saas ではなく自前で環 境を容易する。Container 環境での実行、pipeline ベー スの構築 が出来るので大規模な処理を纏めるのに適している印象。 29
  15. 目的・ どういうことをやるかを考える 例 コー ドに統一感をもたせたい lint を行う コー ドの不具合を素早く検出したい 単体テストを行う

    要件にあったもの他との依存性を調べたい 結合テストを行う ライブラリを常に最新にするのがめんどい 日時でbundle のupdate を行う CI 回すのかっこいいから、 やりたい! この理由もありだけど、 何やるかはちゃんと決めよう 32
  16. Saas のCI を考慮する場合、 使っているツー ルによって連携のしやす さが異なる github 使ってる、gitlab 使っているでも設定する所が異なる。 (github

    ならすぐ連携出来るよ!) CircleCI の場合( というか一般的なSaas の場合) 一度インター ネット 経由で接続するため、private なネットワー ク限定でしかセキュリテ ィポリシー が定められている場合、 基本的に導入が困難。 自前で入れられるツー ル(Jenkins など) を利用した場合が良い時もあ る。 34
  17. CI を設定するコストメリットを考える 単体テストや結合テストを常に実行する設定は有用であるが、 設定 するコストが多い。 まずはlint だけを設定するところから始めるのも1つの考え方となる 効果と設定へのコストは得てして反比例しがち CI は設定したけど、

    テストをメンテするのが大変になっ た・・・ CI 自体が一人にしか設定出来なくて動かなくなった時につら い。 インフラの設定とかが属人化しやすい(Jenkins おじさん管理お じさんの誕生) 36