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
57
CI(継続的インテグレーション)
2017.9 社内勉強会発表資料
2022.5.21 SlideShareから移行
HIRA
September 01, 2017
Tweet
Share
More Decks by HIRA
See All by HIRA
脱VM!リモートコンテナによる開発
hira
0
540
AWS CloudFormationによる Infrastructure as Codeの実現
hira
0
120
MQ(メッセージキュー)入門
hira
0
450
マイクロサービス化に向けて
hira
0
86
Other Decks in Technology
See All in Technology
"とにかくやってみる"で始めるAWS Security Hub
maimyyym
2
100
SDNという名のデータプレーンプログラミングの歴史
ebiken
PRO
2
170
プロダクト活用度で見えた真実 ホリゾンタルSaaSでの顧客解像度の高め方
tadaken3
0
220
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
230
Amplify Gen2 Deep Dive / バックエンドの型をいかにしてフロントエンドへ伝えるか #TSKaigi #TSKaigiKansai #AWSAmplifyJP
tacck
PRO
0
410
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
OCI Vault 概要
oracle4engineer
PRO
0
9.8k
生成AIが変えるデータ分析の全体像
ishikawa_satoru
0
180
あなたの知らない Function.prototype.toString() の世界
mizdra
PRO
3
600
リンクアンドモチベーション ソフトウェアエンジニア向け紹介資料 / Introduction to Link and Motivation for Software Engineers
lmi
4
300k
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
330
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
0
120
The Invisible Side of Design
smashingmag
298
50k
Docker and Python
trallard
40
3.1k
Building Your Own Lightsaber
phodgson
103
6.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
430
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Ruby is Unlike a Banana
tanoku
97
11k
Music & Morning Musume
bryan
46
6.2k
A better future with KSS
kneath
238
17k
Why Our Code Smells
bkeepers
PRO
334
57k
Faster Mobile Websites
deanohume
305
30k
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