129 Views
February 15, 14
スライド概要
リリース対象ど~れだっ?? こんなことで悩んではいけません…
自己紹介 • HN:ぶらっく(@__Black) ぶらっくの技術メモ http://blackssi.cocolog-nifty.com/blog/ • 金融系業務パッケージ担当SE • TFS使い始めてまだ2年ぐらい? • TFSUGスタッフです ※広島在住です!!
「リリース」ってこんな感じ? 開発 テスト リリース テスト 本番提供 • プログラム変更 • 設定ファイル変更 • 開発環境でちゃんと動作する? • 別環境で変更したものをリリースしてみる • リリーステストの通りに本番環境にリリースする
継続的デリバリー • 継続的なソフトウェアの デリバリー • 信頼できるソフトウェア リリースのための ビルド・テスト・ デプロイメントの自動化
継続的デリバリー8つの原則 • ソフトウェアをリリースするための反復可能で 信頼できるプロセスを作る • ほとんどすべてを自動化する • すべてバージョン管理に入れる • 痛みを伴うものはこまめに実施し、 痛い思いは早めに • 品質を作りこむ • 完了した=リリースした • 誰もがデリバリープロセスに対して責任を負う • 継続的改善
絶望的デリバリー8つの例(?) • ソフトウェアのリリースは複数の端末で 毎回手作業 • ほとんどすべてが手動 (プログラムをエクスプローラーでコピー) • 現地にしか設定ファイルがない • 毎回毎回現地一発勝負 • 品質は動かしたらわかる • 完了した=プログラムをビルドした • 誰もが責任から逃げる • 継続的苦痛
今日のお題(絶望例) • リリース対象を開発者に確認したけど、リリース してみたら対象ファイルが不足してた • 修正したソースはわかるけど、どのバイナリが リリース対象かわからない
「リリース」ってこんな感じ? 開発 テスト リリース テスト 本番提供 • プログラム変更 • 設定ファイル変更 • 開発環境でちゃんと動作する? • 別環境で変更したものをリリースしてみる • リリーステストの通りに本番環境にリリースする
さて、どうしてくれましょうw • リリース対象を開発者に確認したけど、リリース してみたら対象ファイルが不足してた →バージョン管理システムをちゃんと使えば、 前回リリースからの差分リストはすぐに 取り出せます!
さて、どうしてくれましょうw • 修正したソースはわかるけど、どのバイナリが リリース対象かわからない →継続的インテグレーション環境(CI)を ちゃんと構築していれば、ソースを修正した 以降にビルドしたバイナリは特定できます! • TFSなら、バージョン管理・CI環境・作業項目 管理機能などが統合され、プロジェクトで使用 される情報を横断的に管理可能です! <(`^´)>
でも、こんなことないですか? • リリース対象を開発者に確認したけど、リリース してみたら対象ファイルが不足してた →バージョン管理システムをちゃんと使えば、 前回リリースからの差分リストはすぐに 取り出せます! • 画面操作しないと差分がわからない・・・
でも、こんなことないですか? • 修正したソースはわかるけど、どのバイナリが リリース対象かわからない →継続的インテグレーション(CI)環境を ちゃんと構築していれば、ソースを修正した 以降にビルドしたバイナリは特定できます! • 修正したソースを含むバイナリだけリリース したいのに、ソースとバイナリの関連がわからない • CI環境でビルドを実行すると全てのバイナリが 再作成されるので、バイナリの更新日時で 判断できない
ちょっとがんばります! • 画面操作しないと差分がわからない・・・ →ビルド時に、前回リリースからの修正リストを 出力するプログラムを実行すれば!
修正リスト出力 • 「前回リリース」ってどう管理する? →今回は「ラベル」を使用してみます。 MAIN チェック アウト チェック イン 前回 ラベル1 今回
修正リスト出力 • 「ラベル1」以降のチェックイン内容 (チェンジセット)を取得すれば、 修正リストになります。 • 実は、ラベルもチェンジセットを基に 登録されているので、特定のチェンジセット間の 修正情報を取得するだけになります。
修正リスト出力 • TFSへの接続
修正リスト出力 • ラベル名からチェンジセットIDを取得
修正リスト出力 • チェンジセットの履歴を取得
ちょっとがんばります! • 修正したソースを含むバイナリだけリリース したいのに、ソースとバイナリの関連がわからない →ビルド時の情報を使って、どのソースからどの バイナリを作成したかが取得できれば!
バイナリからソースファイル名を (Java版) • JDKにある「javap」コマンドを使って、 jarファイルに格納されているクラス情報と共に、 ビルド時のソースファイル名を取得します。 • ソースファイル名をリスト化すれば、jarファイルと ソースの関連は簡単に確認できるようになりま す。
バイナリからソースファイル名を (Java版) • Jarファイルの展開
バイナリからソースファイル名を (Java版) • classファイルからソース名を抽出
バイナリからソースファイル名を (.NET版) • 「Debug Interface Access SDK」を使って、 ビルド時に生成されたPDB(プログラムデータ ベース)ファイルからソースファイル名を取得しま す。 • PDBファイルの内容を出力するサンプルが あります。 (http://msdn.microsoft.com/jajp/library/vstudio/b5ke49f5.aspx) →「dia2dump」で検索
バイナリからソースファイル名を (.NET版) • ソースファイル名の抽出
取得作業を自動化 • 「ビルド後に実行するコマンドライン」とか、Ant のexecタスクとかで自動実行させます。 • Visual Studio & TFS 2013であれば、 「RunScript」アクティビティを使って、 ワークフロー内で実行することもできそうです。