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
日経電子版 x AIエージェントの可能性とAgentic RAGによって提案書生成を行う技術
masahiro_nishimi
1
290
これからSREになる人と、これからもSREをやっていく人へ
masayoshi
6
4.1k
Moved to https://speakerdeck.com/toshihue/presales-engineer-career-bridging-tech-biz-ja
toshihue
2
550
Larkご案内資料
customercloud
PRO
0
600
君はPostScriptなウィンドウシステム 「NeWS」をご存知か?/sunnews
koyhoge
0
720
The 5 Obstacles to High-Performing Teams
mdalmijn
0
270
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
22
5.8k
Classmethod AI Talks(CATs) #15 司会進行スライド(2025.02.06) / classmethod-ai-talks-aka-cats_moderator-slides_vol15_2025-02-06
shinyaa31
0
170
Postmanを使いこなす!2025年ぜひとも押さえておきたいPostmanの10の機能
nagix
2
120
30分でわかる『アジャイルデータモデリング』
hanon52_
9
2.2k
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
100
開発者が自律的に AWS Security Hub findings に 対応する仕組みと AWS re:Invent 2024 登壇体験談 / Developers autonomously report AWS Security Hub findings Corresponding mechanism and AWS re:Invent 2024 presentation experience
kaminashi
0
190
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Six Lessons from altMBA
skipperchong
27
3.6k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
We Have a Design System, Now What?
morganepeng
51
7.4k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Become a Pro
speakerdeck
PRO
26
5.1k
Producing Creativity
orderedlist
PRO
343
39k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
A Philosophy of Restraint
colly
203
16k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
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