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
100
0
Share
CI(継続的インテグレーション)
2017.9 社内勉強会発表資料
2022.5.21 SlideShareから移行
HIRA
September 01, 2017
More Decks by HIRA
See All by HIRA
脱VM!リモートコンテナによる開発
hira
0
1k
AWS CloudFormationによる Infrastructure as Codeの実現
hira
0
220
MQ(メッセージキュー)入門
hira
0
820
マイクロサービス化に向けて
hira
0
190
Other Decks in Technology
See All in Technology
Ruby::Boxでできること、Refinementsでできること
joker1007
3
390
Building applications in the Gemini API family.
line_developers_tw
PRO
0
1.3k
価格.comをAI駆動で全面刷新する ー 30年分の技術的負債を返し、次の30年の土台をつくる ー / AI Engineering Summit Tokyo 2026
tkyowa
47
52k
関西に縁あるMicrosoft MVPsが語るCopilotの未来
kasada
0
1.1k
2026.06.13_AI時代に事業会社が「SIer出身エンジニア」を求める理由 / Why Businesses Seek Engineers with a System Integrator Background in the AI Era
jumtech
0
420
実装は速くなった、レビューはどうする? ― 自身のレビューをAIで再現させるサーヴァントエンジニアリングのすゝめ / Implementation got faster. So what about reviews? — An invitation to Servant Engineering: Recreating your own code reviews with AI
nrslib
6
3.7k
サプライチェーンセキュリティの空白地帯 - 信頼できる”依存性”の未来を考える
rung
PRO
2
680
【Gen-AX】20260530開催_JJUG CCC 2026 Spring
genax
0
420
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
180
個人最適 から 全体最適 へ AI情報共有会・AIギルド・AI-DLC で進める カンリーの組織展開
rfdnxbro
0
1.5k
Dario Amodi『Policy on the AI Exponential』を理解する
nagatsu
0
170
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.1k
Featured
See All Featured
It's Worth the Effort
3n
188
29k
Six Lessons from altMBA
skipperchong
29
4.3k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Site-Speed That Sticks
csswizardry
13
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2k
Design in an AI World
tapps
1
220
sira's awesome portfolio website redesign presentation
elsirapls
0
270
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
260
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