Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Circle CI 入門
Search
yutachaos
March 19, 2018
Technology
0
630
Circle CI 入門
サポーターズ勉強会 2018/03/19
Circle CI 入門
https://supporterzcolab.com/event/318/
yutachaos
March 19, 2018
Tweet
Share
More Decks by yutachaos
See All by yutachaos
JenkinsのJobを CronJobに移した話 /The story of moving Jenkins Job to CronJob
yutachaos
0
180
History of Infrastructure as a Code testing
yutachaos
2
5.2k
AWS CodePipeline 初めて触って少しハマった話 / A story that challenged AWS CodePipeline for the first time
yutachaos
0
85
gRPC in スタディサプリENGLISH / gRPC in StudySapuri ENGLISH
yutachaos
0
2.7k
AKS,EKS,GKEコマンド比較してみた /compared AKS, EKS, GKE command
yutachaos
2
2.3k
AWS ECS の説明 /aws-ecs-introduction
yutachaos
0
81
Docker + Jenkinsでバッチ実行 / Using Docker and Jenkins execution batch
yutachaos
0
250
Spring Batchの紹介
yutachaos
0
250
非エンジニア向けMarkdown 勉強会
yutachaos
1
300
Other Decks in Technology
See All in Technology
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
320
Python(PYNQ)がテーマのAMD主催のFPGAコンテストに参加してきた
iotengineer22
0
500
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.9k
『Firebase Dynamic Links終了に備える』 FlutterアプリでのAdjust導入とDeeplink最適化
techiro
0
130
100 名超が参加した日経グループ横断の競技型 AWS 学習イベント「Nikkei Group AWS GameDay」の紹介/mediajaws202411
nikkei_engineer_recruiting
1
170
強いチームと開発生産性
onk
PRO
35
11k
iOS/Androidで同じUI体験をネ イティブで作成する際に気をつ けたい落とし穴
fumiyasac0921
1
110
B2B SaaSから見た最近のC#/.NETの進化
sansantech
PRO
0
890
Taming you application's environments
salaboy
0
190
CDCL による厳密解法を採用した MILP ソルバー
imai448
3
130
The Rise of LLMOps
asei
7
1.7k
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
120
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Code Reviewing Like a Champion
maltzj
520
39k
Gamification - CAS2011
davidbonilla
80
5k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Scaling GitHub
holman
458
140k
Teambox: Starting and Learning
jrom
133
8.8k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
How GitHub (no longer) Works
holman
310
140k
Side Projects
sachag
452
42k
Transcript
Circle CI 入門 1
自己紹介 木村 勇太 サー バー サイドエンジニア プログラミング言語 PHP, node, java
, Ruby 主にAWS を使ったシステム構築してます。 実装、 開発、 インフラ構 築とかわりかし何でも屋。 2
近況 AWS Certified Solutions Architect, AWS Certified DevOps Engineer Professional
取りました。 Qiita 記事に書いてます。 https://qiita.com/yutaChaos/items/2b0b8d9bfe76a597953c https://qiita.com/yutaChaos/items/081ac5b067856206a2a3 3
Agenda CI( 継続的インテグレー ション) とは? Circle CI の紹介 サンプルコー ドの解説
他のCI ツー ルの紹介 CI 構築する時に私が考えること 4
CI is 何? 5
継続的インテグレー ション、CI( 英: continuous integration) と は、 主にプログラマー のアプリケー ション作成時の品質改善や納期
の短縮のための習慣のことである。 エクストリー ム・ プログラミン グ (XP) のプラクティスの一つで、 狭義にはビルドやテスト、 イン スペクションなどを継続的に実行していくことを意味する (by wikipedia 先生) 6
CI はエクストリー ム・ プログラミングのプラクティスの 一つ。 7
エクストリー ム・ プログラミング is 何? 8
エクストリー ム・ プログラミング、XP( 英: extreme programming) は、 ケント・ ベックらによって定式化され、 提唱さ
れているソフトウェア開発手法である。 柔軟性の高い開発手法であ るため、 難易度の高い開発やビジネス上の要求が刻々 と変わるよう な状況に向いた開発手法である。 事前計画よりも柔軟性を重視す る。1999 年に書籍『XP エクストリー ム・ プログラミング入門― ソ フトウェア開発の究極の手法』 によって発表された。XP は、 軽量開 発手法あるいはアジャイルソフトウェア開発手法と呼ばれる、 同種 の開発手法のなかで代表的なものである。 (by wikipedia 先生) 9
具体的にはCI は開発のプラクティスに含まれている 10
テスト駆動開発 テストコー ドを書きつつ、 機能の実装を行い、 常にコー ドに対して テストコー ドによる自動テストを行うように開発する手法 ペア・ プログラミング
Observer( 指示する人),Driver( プログラミングを実際に書く人) の二 人組になってプログラミングを行う手法 11
リファクタリング 書いたコー ドの内容を修正・ 改善を行うこと 集団的な所有権 git やsvn などのVCS( バー ジョン管理システム)
を使い、 誰でも同じ コー ドを編集出来るようにする CI( 継続的インテグレー ション) ← これ! 作成したテスト、 ソー スのビルドやデプロイ、 自動で実行される環 境を作る YAGNI(You ain't gonna need it) 機能は必要になるまで実装しない 12
エクストリー ム・ プログラミングでは出来るだけ小さい単位で開発 を行い、 細かい単位でのフィー ドバックをするように提唱されてい ます。 テストコー ドを作成しつつ開発する場合、 テスト実行を毎回ロー
カ ルで行うのは大変。 自動化することによって実行コストを下げて、 より早くフィー ドバ ックを行おう! というのがCI です。( ざっくり) 13
Circle CI について 14
CI を行う環境を提供してくれるSaaS。 同種で最近流行りなもの に T r a v i s
C I , W e r c k e r とか色々 あります。 すごいたくさんある ので多くは語りません。 15
何が出来るの? 16
A. 基本的になんでも出来ます。 17
Circle CI が提供してくれること 公式からのコピペ& 翻訳(https://circleci.com/product/) 18
VCS との連携 CircleCI は、GitHub、GitHub Enterprise、 およびBitbucket と統合さ れています。 コー ドをコミットするたびにCircleCI
はビルドを作成 します 自動テスト CircleCI は、 コンテナまたは仮想マシンでビルドを自動的にテスト します。 19
通知 ビルドに失敗した場合にチー ムに通知されるので、 問題を迅速に解 決できます。 自動デプロイ 成功したビルドはさまざまな環境にデプロイされ、 あなたのプロダ クトはより早く市場に投入されます。 20
料金 1 コンテナ一月につき1500 分まで無料。 コンテナを追加する場合は50 ドル/ 月 21
ユー スケー ス テストの実行、 アプリケー ションのデプロイ、 アプリのビルド etc・・・ 22
サンプルコー ド 公式のyml ファイルを少しいじってruby で書きました。 https://github.com/yutachaos/circleci‑initial 23
使い方 GitHub、Bitbucket で管理されたrepository を用意します。 circleCI の設定ファイルを用意します。( 後述) CircleCI とVCS を連携します。
git にpush します Circle CI が動いてテストが動きます。 以上 24
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
environment 該当のjob の中で利用出来る環境変数を記載する。 steps job の中で実行されるコマンドを記載していく。 run 実行するコマンドを記載していく name 実行するコマンドの説明、CircleCI
の画面に表示される。 必須項目 ではないが設定してあったほうが見やすい command 実行するコマンド、sh のファイルなどを設定することが出来る。 26
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
他のCI ツー ルの紹介 最近はSaas でも、 自前で入れて使う形でもたくさんのCI ツー ルがあ ります。 たくさんあるので少しでも触ったものだけを書きます
(><) Jenkins Jenkins おじさん。 通常自前のサー バー にいれて使うことが多 い。 老舗だが、 実績と使用率はNo1 といえる。Jenkins2 から出 来るようになったpipeline が結構便利 最近はSaas 版もある。 CircleCI やDocker もCI はJenkins で回さ れている。 TravisCI 最近のイケイケな会社はCircleCI かTravisCI というイメー ジ。 private で使うためには有料プランが必要。public で使う場合は 無料でOSS での使用例が多いのでサンプルを探しやすくもあ る。 28
GitLabCI gitlab に連携出来るCI ツー ル。gitlab 本体とは別にserver を容易 し、runner として実行出来る。 Bitrise
iOS 向けのCI ツー ル。 同僚エンジニアいわく結構使いやすい。 無料枠がやや貧弱だが、50 ドルからの有料枠なので、 頻繁に ビルドするのであれば便利。 Concourse Go 製のCI ツー ル、 最近流行っている。Saas ではなく自前で環 境を容易する。Container 環境での実行、pipeline ベー スの構築 が出来るので大規模な処理を纏めるのに適している印象。 29
CI ツー ルは結構なんでも出来る。 だからどの くらいではじめるかが重要 30
CI 構築する時に私が考えること 31
目的・ どういうことをやるかを考える 例 コー ドに統一感をもたせたい lint を行う コー ドの不具合を素早く検出したい 単体テストを行う
要件にあったもの他との依存性を調べたい 結合テストを行う ライブラリを常に最新にするのがめんどい 日時でbundle のupdate を行う CI 回すのかっこいいから、 やりたい! この理由もありだけど、 何やるかはちゃんと決めよう 32
どのツー ルを使うのか考える チー ムで使っているバー ジョン管理システムを調べる git github gitlab gitbucket codeCommit
etc・・・ svn cvn 33
Saas のCI を考慮する場合、 使っているツー ルによって連携のしやす さが異なる github 使ってる、gitlab 使っているでも設定する所が異なる。 (github
ならすぐ連携出来るよ!) CircleCI の場合( というか一般的なSaas の場合) 一度インター ネット 経由で接続するため、private なネットワー ク限定でしかセキュリテ ィポリシー が定められている場合、 基本的に導入が困難。 自前で入れられるツー ル(Jenkins など) を利用した場合が良い時もあ る。 34
粒度を考える CI を動かす粒度を考える push ごとに動かす PR 毎に動かす master にpush されたときに動かすなど
時間での定期実行する(cron 的設定も出来ます) 35
CI を設定するコストメリットを考える 単体テストや結合テストを常に実行する設定は有用であるが、 設定 するコストが多い。 まずはlint だけを設定するところから始めるのも1つの考え方となる 効果と設定へのコストは得てして反比例しがち CI は設定したけど、
テストをメンテするのが大変になっ た・・・ CI 自体が一人にしか設定出来なくて動かなくなった時につら い。 インフラの設定とかが属人化しやすい(Jenkins おじさん管理お じさんの誕生) 36
まとめ Docker でやるから環境依存解決楽、Docker かわいい よ、Docker Saas だから、 インフラ維持コスト少ない。 CI 回すと便利だけど、
一気にやると大変だから、 少しず つやろう。 37
CI 回して早いCycle を回そう!!! 38
ありがとうございました! 39