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
CI(継続的インテグレーション)
Search
HIRA
September 01, 2017
Technology
0
62
CI(継続的インテグレーション)
2017.9 社内勉強会発表資料
2022.5.21 SlideShareから移行
HIRA
September 01, 2017
Tweet
Share
More Decks by HIRA
See All by HIRA
脱VM!リモートコンテナによる開発
hira
0
630
AWS CloudFormationによる Infrastructure as Codeの実現
hira
0
140
MQ(メッセージキュー)入門
hira
0
530
マイクロサービス化に向けて
hira
0
110
Other Decks in Technology
See All in Technology
Tech Blogを書きやすい環境づくり
lycorptech_jp
PRO
1
230
データマネジメントのトレードオフに立ち向かう
ikkimiyazaki
3
300
Postmanを使いこなす!2025年ぜひとも押さえておきたいPostmanの10の機能
nagix
2
140
白金鉱業Meetup Vol.17_あるデータサイエンティストのデータマネジメントとの向き合い方
brainpadpr
4
300
あれは良かった、あれは苦労したB2B2C型SaaSの新規開発におけるCloud Spanner
hirohito1108
2
370
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
290
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
6
57k
レビューを増やしつつ 高評価維持するテクニック
tsuzuki817
1
480
転生CISOサバイバル・ガイド / CISO Career Transition Survival Guide
kanny
3
920
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
24
6.6k
RECRUIT TECH CONFERENCE 2025 プレイベント【高橋】
recruitengineers
PRO
0
120
2024.02.19 W&B AIエージェントLT会 / AIエージェントが業務を代行するための計画と実行 / Algomatic 宮脇
smiyawaki0820
10
1.5k
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.5k
Scaling GitHub
holman
459
140k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
How to train your dragon (web standard)
notwaldorf
91
5.8k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
Making Projects Easy
brettharned
116
6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Bash Introduction
62gerente
610
210k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
30
4.6k
For a Future-Friendly Web
brad_frost
176
9.5k
Transcript
(継続的インテグレーション) 2017年9月 KENJI HIRATA CI
本日のテーマ CI(継続的インテグレーション) ユニット テスト ビルド 実装 結合 テスト リリース デリバリ
CI(継続的インテグレーション) CD(継続的デプロイ) ここ! 2
1. CIについて 2. CIに関するツールのご紹介 アジェンダ 3
1.CIについて 4
5 CIとは? 継続的インテグレーション CI(英: continuous integration)とは、ソフトウェア開 発過程において,ビルドやテストを頻繁に繰り返し行う ことにより問題を早期に発見する開発手法 開発者が自分のコード変更を定期的にセントラルリポジ トリにマージし、その後に自動化されたビルドとテスト
を実行する DevOps ソフトウェア開発の手法
6 ビルド・テストを自動化して、小さくたくさん回す CIとは? リポジトリ テスト ビルド 自動化
7 なぜCI?
よくある開発現場の問題 ・結合またはシステムテスト時に問題が発見され 手戻りの工数がかさむ(デグレ発生など) ×早期にテストが行えておらずバグが残存 ×後工程でのテスト工数が増大 ・リポジトリから最新のソースコードを取得したが ビルドが通らない ×ビルドエラーを発生させるコードがコミットされている ×ビルドエラーのチェックが行われていない 8
解決へのアプローチ リポジトリから最新のソースコードを取得したが ビルドが通らない 9 ビルドエラーをすぐ検知する必要がある リポジトリにマージしたら即ビルドを行い結果を通知する。 ビルドエラーの場合は即対応する。
解決へのアプローチ 結合またはシステムテスト時に問題が発見され手戻り の工数がかさむ 10 デグレをすぐ検知する必要がある ビルドしたら即テストを行い結果を通知する。 NGの場合は即対応する。
11 CIの目的 ・バグの早期発見と対処 ・ソフトウェアの品質向上 ・リリースまでのリードタイムの短縮 「ビルド」と「テスト」の自動化などにより
ビルド・デプロイの自動化 12
13 ビルド・デプロイの自動化をしない場合 (実装) エンジニア 検証サーバ 例えば、検証サーバへのアップ時の面倒ごと Git (バージョン管理) push ・ビルド
・デプロイ 面倒1:サーバに手動で接続する 面倒2:ビルド・デプロイ手順を間違えて壊す 面倒3:特定のメンバーにしかビルドができない (属人化)→依頼しないといけない。 などなど・・ 開発以外の作業が多い! 作業者の負担高い
14 (実装) GitBucket Slack Jenkins (構成管理) (バージョン管理) (CIツール) エンジニア 現プロジェクト例
push 結果通知 hook (チャット) 通知指示 実行 ビルド テスト 検証サーバ ビルド・デプロイの自動化をした場合
15 (実装) GitBucket Slack Jenkins (構成管理) (バージョン管理) (CIツール) エンジニア 現プロジェクト例
push 結果通知 hook (チャット) 通知指示 実行 ビルド テスト 検証サーバ 現時点のデプロイ状況がわかる ビルド・デプロイの自動化をした場合 作業中のメンバや、ビルド・デプロイの結果が全員に伝わる
16 (実装) GitBucket Slack Jenkins (構成管理) (バージョン管理) (CIツール) エンジニア 現プロジェクト例
push 結果通知 hook (チャット) 通知指示 実行 ビルド テスト 検証サーバ pushして完了通知を受け取るだけ! サーバ接続やビルド・デプロイ作業は不要 ビルド・デプロイの自動化をした場合
17 (実装) GitBucket Slack Jenkins (構成管理) (バージョン管理) (CIツール) エンジニア 現プロジェクト例
push 完了通知 hook (チャット) 通知指示 実行 ビルド テスト 検証サーバ 構成管理ツールで秘伝のタレ化、属人性を排除 ビルド・デプロイの自動化をした場合
ビルド・デプロイの自動化をした場合 実装以外の面倒な作業が減る。 削減した時間を実装に充てるこ とで、結果的に同じ時間でより 多くの成果を生み出せる。 生産性向上 18 従来 自動化 実装
ビルド デプロイ など
19 テスト自動化
20 テスト自動化 バグ修正する際に、ソースコードの変更からテスト実行までのタイムラグ が長いと、大量の変更点から原因を切り分けるために、何度も異なる条件 のテストを再実行したり、複数のソースコード変更を追跡したりといった 調査が必要。 バグ特定の負担を軽減するためには、ソースコードの変更からテスト実行 までのタイムラグを短縮すること。 バグ特定の負担
21 テスト自動化 ソースコードの変更からテストの実行までのタイムラグを最小化するには 、ソースコードが変更された直後に毎回リグレッションテストを実行する 環境を整備する必要がある。 複雑なテストケースの場合は、状況の作成(DBデータ、ファイルなどの準 備など)は大変・・ テストケースの実行を自動化する必要がある。
22 テスト自動化 自動テストケース作成の課題 カバレッジの最大化とコストの最小化 → テスト価値である「コスト」「カバレッジ」を最適する テスト設計スキルが必要。 時間や人(リソース)が少ない場合、全テストケースの作成が できないため、短時間で効果のあるテストを作成する必要 がある。
23 テスト自動化 現プロジェクトの課題への対処法 アプリケーション層のテス トケースをJUnitで作成 → アプリケーション層のアクショ ンに対してのテスト(システムテス トレベルのシナリオ)を実行するこ とで、ドメイン層、インフラストラ
クチャ層の実行をある程度網羅でき る。 アプリケーション層 ブラウザテスト(Seleniumなど)を利用せず、JUnitのみとすることで、テ スト実装工数と実行時間短縮化 ドメイン層 インフラストラクチャ層
テスト自動化 ビルドの度にテストを行いデグレを検知、短時間でバグ特定 品質向上 やりすぎると納期とコストを圧迫するのでバランスが重要 あくまで保守開発のためのリグレッションテストを目的とする 24
2.CIに関するツールの紹介 25
26 CIに関するツール • CIツール • リポジトリサービス • 構成管理ツール • チャットツール
• テストツール
CIツール Bamboo Jenkins Amazon CodeBuild オープンソース。CIのデファクトスタンダード AWS上で利用するビルドサービス 他、TravisCI、CircleCIなどクラウド利用型のものもあります。 Atlassian製品のCI/CDサービス 27
CIツール 28 利用の目的 サーバに接続してコマンドを実行する面倒や繰り返し行う作業を省き、効率化する 1、コマンド操作をより手間なく行う 2、構築作業をより安全かつ確実に行う 手作業によるミスを防ぐ。可能な限り手作業や人の判断を省いて誤入力の余地を なくす。決まった作業を連続して行うことを強制する。 3、構築やテスト結果の蓄積 実行の結果の履歴情報を蓄積し、障害発生時の原因調査を行えるようにする。
CIツール Jenkins •Tomcatなどのサーブレットで動作するJavaのWEBシステム •cronライクなスケジューリングでビルドを実行 •WebHookなどリクエストをトリガーにビルドを実行 •ジョブの履歴保存(問題発生時に原因を究明しやすい。) •様々なプラグインがある 例えば、Junitの結果を集計しテストレポートを生成することもできる 29
CIツール 現プロジェクトで実施していること ・Gitリポジトリへのコミットをトリガーにジョブ実行 ・検証サーバへビルドを実行 ・Junitのテスト結果を収集してテストレポート生成 ・ビルドとテスト結果をチャットに通知 実行のタイミング •リポジトリにコミットされたとき •午前と午後に1回づつ 30
リポジトリサービス GitBucket GitHub GitLab Gitのリポジトリ共有WEBサービス オープンソース。GitHubの基本的な機能を搭載している 社内プライベート環境内に導入して利用できる BitBucket Attlasian製品のWEBサービス Amazon
CodeCommit 31 AWSが提供するGitホスティングサービス
リポジトリサービス GitBucket •サーブレットで動作するJavaのWEBシステム •リポジトリ管理 •PullRequest, issue, wiki, fork, webHookなどの機能あり 32
リポジトリサービス •ソース管理 •ブランチ管理 •PullRequestの実行と管理 •JenkinsへのWebHook 現プロジェクトで実施していること 33
構成管理ツール 構成管理ツールとは? •手動オペレーションによるタイムロス削減 •メンテナンス時におけるオペレーションミス発生可能性低減 •運用手順の変更の適用漏れ防止 •直接サーバにログインする機会を最小限にすることでセキュリテ ィの向上 利用メリット 34 サーバの管理や設定を自動化、複数のサーバやクラウドインフラ
を統一的に制御することができるツール。
3. 構成管理ツール Ansible RedHut社が開発するオープンソース。 Chef 35 Opscodeが開発するオープンソース。 AWS CodeDeploy AWSが提供するデプロイサービス
3. 構成管理ツール •エージェントレス、クライアントにインストール不要 •YAML形式でシンプルに記述できる •Pythonで動作 •タスク(モジュール処理)をPlayBookで定義 処理内容は、YAMLで記述するためPythonの知識は不要 36
4. チャットツール Slack Saas型のビジネス向けチャットサービス 37 Skype ChatWork HipChat チャットの定番 日本製のSaas型のビジネス向けチャットサービス
Attlasianのチャットサービス
4. チャットツール Slack •デベロッパー向けの機能が充実 •プラグインが豊富 •ChatOpsに最適 •チーム、チャンネルなどグループチャット 38
4. チャットツール 現プロジェクトで実施していること •メンバーコミュニケーション •Jenkinsのジョブ実行結果を通知 •重大なセキュリティ情報のRSSを通知 •AWS監視サービスからのアラート通知 39
4. チャットツール 前の現場で実施していたこと •Googleカレンダーと同期し、リリース予定を通知 •Hubotと連携しSlackからJenkinsのジョブを実行 •GitHubと連携し、プルリクやコミットマージの通知 •監視ツールと連携。サーバの負荷状況、アラートを通知 40 Dev(開発:アプリ)とOps(運用:インフラ)の情報共有 コミュニケーションが円滑に行えるようになる
4. チャットツール Slackの最大の魅力はHubotとの連携 GitHub社が開発したBotフレームワーク CoffeeScript,JavaScriptで処理を記述する Hubotとは? Slack Hubot 41 WEBサービス
API 例えば、httpで様々なAPIにアクセスしてSlackに通知できる
5. テストツール JUnit Javaのテスティングツール 42 Selenium Webブラウザテスティングツール JMeter 負荷テスト用ツール 動作中にキャプチャ(ハードコピー)取得も可能
ご静聴ありがとうございました。 43