More Related Content
PPTX
KUSANAGIユーザグループ東京 第1回勉強会 資料 PPTX
KEY
PPTX
Zabbix による ms sql監視 ~データベースモニタリング~ odbc PPT
Performance and Scalability of Web Service PDF
Mackerelによる
簡単サーバー管理入門と発展形 PDF
HerokuでJava7 #herokujp #waza PDF
ウェブアプリケーションのパフォーマンスチューニング What's hot
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話 PDF
NVMFS 使ってみたとか 言っちゃって マジカジュアルな奴 PDF
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会) PDF
PPTX
ASP.NETからASP.NET Coreに移行した話 PPTX
Zabbixによるオートスケーリングクラスタ監視とオペレーション自動化 PPTX
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~ PDF
PDF
PDF
さくらのクラウドフォーメーション with Chef [XEgg session] PDF
LambdaとMobileの美味しいかもしれない関係 PDF
PHP&NewSQLで考える次世代アプリケーション PDF
Web Framework Benchmarksと Perl の現状報告会 YAPC::Asia Tokyo 2014 LT PDF
PDF
Cm re growth-reinvent-app304-kaji PDF
サーバの構築作業や運用管理を自動化する「Chef」 (CADC研究レポート発表LT) PDF
Gearpump, akka based Distributed Reactive Realtime Engine PDF
Webアプリケーションの パフォーマンス向上のコツ 概要編 PPTX
【 Zabbix 2.0 】zabbix 2.0による簡単 MySQL 監視 #Zabbix PDF
Viewers also liked
PPTX
Ocean Floor Features: Ocean Trenches and Volcanic Arcs PPTX
PPTX
PPTX
Presentasi KK 2 RICHO DEA PRATAMA PDF
PPT
проект №39 роль гос ва в сми PPTX
PPT
Similar to Continuous delivery 6
PDF
PDF
PDF
継続的デリバリー読書会 第 5 章 デプロイメントパイプラインの解剖学 PDF
CEDEC2015_OpenStack で運用する Private Cloud の泥臭い(リアル)な話 PDF
PDF
PDF
【15-E-7】セキュアな環境でDevOpsを実現する厳選ツール PDF
PPTX
Continuous delivery chapter13 PDF
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム PDF
PDF
「継続的デリバリー」読書会 第3章 継続的デリバリー PDF
KEY
PDF
JAWS-UG Meets Windows (JAWS Days 2017) PPTX
PDF
PDF
20121119.dodai projectの紹介 PDF
PDF
about dodai project in OSC 2012.Cloud Continuous delivery 6
- 1.
- 2.
6.1 導入
• 目的
• ビルド・デプロイメントツールに共通した原
則の概要や情報、コツや小技、更なる情報へ
の参照
• スクリプトによる環境管理
• 11 章「基盤と環境を管理する」で扱う
• 使い続けるものだから注意深く設計、保
守しなければいけない
• Rails なら、Rake などを使えば動かすのは
簡単
- 3.
6.2 ビルドツールの概要 (1/2)
•共通
– タスクが正しい順序で実行され、依存してい
る各タスクが正確に一度だけ実行される
– 依存関係のネットワーク内にあるタスクをす
べて実行する
• 本質的な性質
– 「実行内容」「依存する別のタスク」
• ツールによる相違点
– タスク指向 or プロダクト指向
- 4.
6.2 ビルドツールの概要 (2/2)
•タスク指向
– 依存関係をタスクの集まりとして記述
– たとえば、Ant
• 記述したタスク (テスト含) がすべて一度だけ実行
• プロダクト指向
– プロダクト (最終形体) から依存関係を記述
– たとえば、make
• 修正されたファイルが含まれるプロダクトをビル
ド
- 5.
6.2.1 Make
• 強力なプロダクト指向ビルドツール
•コンパイル時間削減に寄与
• 欠点
– 大規模だと Makefile の管理が大変
– シェルに依存
• 今は Scons が好んで使われている
– ただ、Autotools を使った make install に当たる処
理などは個別に書く必要がある
– Autotools
• OS 依存性を吸収してくれるツール郡 (configure 作ると
きとか)
- 6.
6.2.2 Ant
• タスク指向のビルドツール
•Java の呼び出しが簡単に書ける
• 欠点
– XML が難解
– 定型処理を書くのに時間を要する?
– antcall が混乱を引き起こす
• タスクからタスクを呼び出すタスク
– ビルドプロセスの情報が取得できない
– Import、macrodef が新人ユーザに理解されない?
- 7.
6.2.3 NAnt とMSBuild
• Java 開発者が NAnt を作成
• Microsoft が NAnt の純正マイナー版を提供
– MSBuild になった
• 欠点は Ant と一緒
- 8.
6.2.4 Maven
• タスク指向のビルドツール
•Convention over configuration の原則
– http://knowledge.sorich.jp/?Java%2FMaven%2FMaven%E
3%81%AE%E7%89%B9%E5%BE%B4 (引用)
• 依存を勝手に解消してくれる
• Ivy を Ant のタスクに入れれば依存関係の解消は可
能
• 欠点
– 規約に従ってないことが困難
– 拡張するのが大変だが、大概はプラグインがある
– 依存ライブラリの自動更新
• 13 章「コンポーネントや依存関係を管理する」で詳細
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
6.3.2 アプリケーションをデプロイ
するのに適切なテクノロジーを使
え
• 疑似本番環境へのデプロイも自動化されてい
ることが重要
• 一般的なミドルウェアには付属しているツー
ルがあるので、それを使用しなければいけな
い
• デプロイするのは関係者全員
– デプロイツール設計は最初から全員で考える
• ツールは、アプリケーションのアップグレー
ド、サービス停止、DB の更新などもできな
ければいけない
- 15.
6.3.3 すべての環境にデプロイする
のに、同じスクリプトを使え
• あらゆる環境にデプロイするのに、同一
のスクリプトを使う (p159)
• 外部連携 URI などは設定情報としてスクリ
プトと別に管理する
– デプロイメントスクリプトから検索できるこ
と
• 「アプリケーションをローカルで実行で
きるようにするために投資しない理由を
どう正当化するか?」?
- 16.
6.3.4 OS のパッケージングツールを
使え
• OS のパッケージングテクノロジーを使うことを強く勧める
– deb とか RPM
• パッケージングを使えば、Puppet、CfEngine、Marimba に簡単
に載せれる
• 多層アーキテクチャの場合も、各々でパッケージを作る
• バイナリのパッケージングは自動化されていなければならな
い
• Rails なら RubyGems だが、できるとこは OS の標準的なパッ
ケージ管理に従った方がよい
• CPAN はプラットフォームの差異を自動で変換する
– CPAN 最強
– cpanm もあるし
– perlbrew もあるし
- 17.
6.3.5 デプロメントプロセスが冪等
であることを保証せよ
• 冪等
– 何度やっても同じ結果
• 正しく動くとわかっているベースラインから開始する?
– 適切なミドルウェア、アプリケーションが動作する設定などすべて含
まれなければいけない
• 差分デプロイではなく、スクラッチでデプロイしたほうがいい
– 例外 1) クラスタシステムの場合、全体を同時デプロイすることに常に
意味があるわけれはない (クラスタとか全く関係なくね?)
• p321 「カナリアリリース」
• 炭鉱のカナリア
– 例外 2) コンポーネント毎にアプリケーションが分かれてて、本番のコ
ンポーネントと組み合わせテストが完了している場合
• rsync とか使ってもファイル単位で保証できる
• Puppet は設定分析をし、望ましい状態と同期するために必要な変更
だけを行う
– 11 章「基盤と環境を管理する」
- 18.
6.3.6 デプロイメントシステムをイ
ンクリメンタルに進化させよ
• シンプルでインクリメンタルなステップ
の集まり
• すべてのステップを完了させなければい
けないわけではない
• 開発環境から順序立てて、スクリプトを
作っていき、運用担当者に共有したり
フィードバック受けたりで、最後は本番
環境にも同じスクリプトでデプロイでき
るようにする
- 19.
- 20.
- 21.
6.4.2 ソースコードを管理する
• ファイルのパッケージ名と同じ名前のディレ
クトリにファイルを格納?
– あたりまえってか、それ以外でどうやんだ?
• 1 ファイル 1 クラス
• 命名規則に従う
• CheckStyle、FindBugs で上記規約をコミット
ステージで強制する
• 生成される定義 (!= config)、メタデータは src
に含めない
– target において、clean で削除できるようにする
- 22.
6.4.3 テストを管理する
• テスト用はすべてtest/[language] に置く
• 単体テストコードはソースコードと同じ
パッケージ階層で作る
• その他のテストは、別パッケージに置け
るが普通は同じディレクトリに置く
– ビルドスクリプトでフィルタリングを行い、
テストを別々に実行できるようにすればいい
- 23.
6.4.4 ビルドの成果物を管理する
• Mavenはビルド結果を target に格納する
– バージョン管理にコミットしてはいけない
• ビルドプロセスは、最終的に JAR、WAR、EAR のかた
ちでバイナリを生成する
• 別コンポーネント用 (提供ライブラリ) に別の JAR を提
供してもよい
– 13 章「コンポーネントや依存関係を管理する」
• JAR を複数生成するポイント
– アプリケーションのデプロイメントをシンプルにする
– ビルドプロセスを効率的にし、依存関係の複雑さを最小化
する
• プロジェクトは一定のサイズに抑えれば、保守、管理
がしやすくなる
- 24.
6.4.5 ライブラリを管理する
• 管理するパターンは2 つ
– Maven や Ivy に完全に委譲
– lib ディレクトリを作り、そこにコピーしとく
• より洗練されたアプローチ
– 組織内でリポジトリを作り、あらゆるプロ
ジェクトで必要となるライブラリを格納して
おくこと
• 13 章「コンポーネントや依存関係を管理する」
• Ivy や Maven は本番筐体に置くな
– 本番でコンパイルすな!
- 25.
6.5 デプロイメントスクリプト
(1/2)
• 原則「テスト環境や本番環境の変更は、必ず自動かされたプロセス
を通じて行わなければならない」
• デプロメントをスクリプト化するやりかたは 3 つ
– システムが単一の筐体で実行されるなら、その筐体でローカルに実施
する必要なものをすべて行うスクリプトを書く
– 大抵は別々なので、コンポーネント毎に分ける
• データベースアップグレード
• アプリケーションサーバにバイナリをデプロイ
• アプリケーション依存のサービスをアップグレード
– rsync、scp を使ったバイナリをコピーし、ssh を使ってコマンドを実行
• リモートデプロイのやり方は 3 つ
– 各筐体にログインしてコマンドを実行
– エージェントを使って各リモートで実行 (次ページ)
– プラットフォーム毎に適切なパッケージング技術を使って配布? (次
ページ)
• これが一番強力
- 26.
6.5 デプロイメントスクリプト
(2/2)
• プラットフォーム毎に適切なパッケージング技術を使って配
布
– ControlTier、BMC BladeLogic のようなデプロイメントツール、
Marionette Collective、CfEngine、Puppet のような基盤管理ツール
は適切なバージョンがインストールされていることを保証して
くれる
• 11 章「基盤と環境を管理する」
– アプリケーションデプロメント管理と基盤管理の両方で同じ
ツールセットが使える
• エージェントモデル& CI の利点
– 作業削減
• チェックインして、CI サーバを使ってリモートデプロイ
– CI サーバがプロセス管理を見える化してくれる
– CI サーバがリモートアクセスするので、本番にログインしない
などのセキュリティが保たれる
– エージェントモデルうんぬんじゃなくて、CI サーバの話
- 27.
6.5.1 デプロイレイヤとテストレ
イヤ
• 「適正であることがわかっている土台の
上にシステムを構築するよう努力せよ」
– コンパイルできない変更をテストしない
– コミットテストに失敗した変更をテストしな
い
• むしろできなくね?
• ソフトウェアをレイヤ状に考える
- 28.
6.5.2 環境設定をテストする
• 各レイヤをテストして、問題が起きたらすぐに失敗さ
せる
– 問題の明確化
• 極めてシンプルなスモークテストを行い、主要なリ
ソースがあることを確認する
– スモークテストは、度正常な簡易テスト
– p378 「基盤やアプリケーションを監視する」
• スモークテストの例
– DB からレコード検索
– Web サイトであれば 200 OK
– メッセージブローカーにメッセージ送信
– ファイアウォール経由での ping
– ラウンドロビンができているか
- 29.
- 30.
6.6.1 常に相対パスを使え
• 絶対パスを使わない?
– ソフトウェアをレイヤに分けた時に、OS 層まで入っ
てなかったっけ?
• すべてにおいて相対パスを使えば、すべてが正し
い場所に置かれていることが保証できる?
• 絶対パスを例外
– ハードコードされたパスに依存する 3rd ライブラリ
• アプリケーションもシステムのパッケージング
ツールを使って、FHS などの規約を強制する
– 標準的じゃない場所へのインストールは、設定シス
テムのオプションを使う
– 2 章「構成管理」
- 31.
- 32.
- 33.
- 34.
6.6.5 テストが失敗してもビルドは
続けよ
• 続けるという意味は、失敗したことを記
録し、ビルドプロセスの最後で各タスク
の失敗をレポートすればよい
• 各タスクでビルドプロセスを止めると、
次のタスクの結果が分からない
• Nant、Ant では failure-property で制御でき
る
- 35.
6.6.6 統合スモークテストでアプリ
ケーションに制約をかけよ
• アプリケーションが不正な状態であれば、
停止する
– デプロイスクリプトでデプロイするときに、
正しいマシンかどうかをチェックしてもよい
• バッチの話があるが、外部連携とかテス
ト起動できないようなのはどうすればい
いんだ?
- 36.
6.6.7 .NET のコツと裏技
•.NET のプロジェクトファイルには、実際
にビルドするファイルへの参照が含まれ
る
– ファイル消してもダメなときがある
– Windows では「隠しファイルを表示する」機
能を ON にする
• 理想はソリューションから消した時に一
緒に消してくれるといいが・・・
• bin、obj も悪さするから消したほうがい
い?
– 「clean solution」コマンドを打てばいい
- 37.