Slide 1

Slide 1 text

Circle CI 入門 1

Slide 2

Slide 2 text

自己紹介 木村 勇太 サー バー サイドエンジニア プログラミング言語 PHP, node, java , Ruby 主にAWS を使ったシステム構築してます。 実装、 開発、 インフラ構 築とかわりかし何でも屋。 2

Slide 3

Slide 3 text

近況 AWS Certified Solutions Architect, AWS Certified DevOps Engineer Professional 取りました。 Qiita 記事に書いてます。 https://qiita.com/yutaChaos/items/2b0b8d9bfe76a597953c https://qiita.com/yutaChaos/items/081ac5b067856206a2a3 3

Slide 4

Slide 4 text

Agenda CI( 継続的インテグレー ション) とは? Circle CI の紹介 サンプルコー ドの解説 他のCI ツー ルの紹介 CI 構築する時に私が考えること 4

Slide 5

Slide 5 text

CI is 何? 5

Slide 6

Slide 6 text

継続的インテグレー ション、CI( 英: continuous integration) と は、 主にプログラマー のアプリケー ション作成時の品質改善や納期 の短縮のための習慣のことである。 エクストリー ム・ プログラミン グ (XP) のプラクティスの一つで、 狭義にはビルドやテスト、 イン スペクションなどを継続的に実行していくことを意味する (by wikipedia 先生) 6

Slide 7

Slide 7 text

CI はエクストリー ム・ プログラミングのプラクティスの 一つ。 7

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

具体的にはCI は開発のプラクティスに含まれている 10

Slide 11

Slide 11 text

テスト駆動開発 テストコー ドを書きつつ、 機能の実装を行い、 常にコー ドに対して テストコー ドによる自動テストを行うように開発する手法 ペア・ プログラミング Observer( 指示する人),Driver( プログラミングを実際に書く人) の二 人組になってプログラミングを行う手法 11

Slide 12

Slide 12 text

リファクタリング 書いたコー ドの内容を修正・ 改善を行うこと 集団的な所有権 git やsvn などのVCS( バー ジョン管理システム) を使い、 誰でも同じ コー ドを編集出来るようにする CI( 継続的インテグレー ション) ← これ! 作成したテスト、 ソー スのビルドやデプロイ、 自動で実行される環 境を作る YAGNI(You ain't gonna need it) 機能は必要になるまで実装しない 12

Slide 13

Slide 13 text

エクストリー ム・ プログラミングでは出来るだけ小さい単位で開発 を行い、 細かい単位でのフィー ドバックをするように提唱されてい ます。 テストコー ドを作成しつつ開発する場合、 テスト実行を毎回ロー カ ルで行うのは大変。 自動化することによって実行コストを下げて、 より早くフィー ドバ ックを行おう! というのがCI です。( ざっくり) 13

Slide 14

Slide 14 text

Circle CI について 14

Slide 15

Slide 15 text

CI を行う環境を提供してくれるSaaS。 同種で最近流行りなもの に T r a v i s C I , W e r c k e r とか色々 あります。 すごいたくさんある ので多くは語りません。 15

Slide 16

Slide 16 text

何が出来るの? 16

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

VCS との連携 CircleCI は、GitHub、GitHub Enterprise、 およびBitbucket と統合さ れています。 コー ドをコミットするたびにCircleCI はビルドを作成 します 自動テスト CircleCI は、 コンテナまたは仮想マシンでビルドを自動的にテスト します。 19

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

使い方 GitHub、Bitbucket で管理されたrepository を用意します。 circleCI の設定ファイルを用意します。( 後述) CircleCI とVCS を連携します。 git にpush します Circle CI が動いてテストが動きます。 以上 24

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

environment 該当のjob の中で利用出来る環境変数を記載する。 steps job の中で実行されるコマンドを記載していく。 run 実行するコマンドを記載していく name 実行するコマンドの説明、CircleCI の画面に表示される。 必須項目 ではないが設定してあったほうが見やすい command 実行するコマンド、sh のファイルなどを設定することが出来る。 26

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

他のCI ツー ルの紹介 最近はSaas でも、 自前で入れて使う形でもたくさんのCI ツー ルがあ ります。 たくさんあるので少しでも触ったものだけを書きます (><) Jenkins Jenkins おじさん。 通常自前のサー バー にいれて使うことが多 い。 老舗だが、 実績と使用率はNo1 といえる。Jenkins2 から出 来るようになったpipeline が結構便利 最近はSaas 版もある。 CircleCI やDocker もCI はJenkins で回さ れている。 TravisCI 最近のイケイケな会社はCircleCI かTravisCI というイメー ジ。 private で使うためには有料プランが必要。public で使う場合は 無料でOSS での使用例が多いのでサンプルを探しやすくもあ る。 28

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

CI ツー ルは結構なんでも出来る。 だからどの くらいではじめるかが重要 30

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

目的・ どういうことをやるかを考える 例 コー ドに統一感をもたせたい lint を行う コー ドの不具合を素早く検出したい 単体テストを行う 要件にあったもの他との依存性を調べたい 結合テストを行う ライブラリを常に最新にするのがめんどい 日時でbundle のupdate を行う CI 回すのかっこいいから、 やりたい! この理由もありだけど、 何やるかはちゃんと決めよう 32

Slide 33

Slide 33 text

どのツー ルを使うのか考える チー ムで使っているバー ジョン管理システムを調べる git github gitlab gitbucket codeCommit etc・・・ svn cvn 33

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

粒度を考える CI を動かす粒度を考える push ごとに動かす PR 毎に動かす master にpush されたときに動かすなど 時間での定期実行する(cron 的設定も出来ます) 35

Slide 36

Slide 36 text

CI を設定するコストメリットを考える 単体テストや結合テストを常に実行する設定は有用であるが、 設定 するコストが多い。 まずはlint だけを設定するところから始めるのも1つの考え方となる 効果と設定へのコストは得てして反比例しがち CI は設定したけど、 テストをメンテするのが大変になっ た・・・ CI 自体が一人にしか設定出来なくて動かなくなった時につら い。 インフラの設定とかが属人化しやすい(Jenkins おじさん管理お じさんの誕生) 36

Slide 37

Slide 37 text

まとめ Docker でやるから環境依存解決楽、Docker かわいい よ、Docker Saas だから、 インフラ維持コスト少ない。 CI 回すと便利だけど、 一気にやると大変だから、 少しず つやろう。 37

Slide 38

Slide 38 text

CI 回して早いCycle を回そう!!! 38

Slide 39

Slide 39 text

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