C# と .NET Framework 4 を主にWindows Formのアプリケーション開発について

2011年5月22日

Team Foundation Server 2010 SP1をWindows 7にインストール Team Foundation Server 2010 SP1をWindows 7にインストール

Team Foundation Server 2010 SP1 を Windows 7 SP1上に構築して評価してみる。
テスト環境なので、物理層にはSQL Server Express 2008 R2を使用している。
この環境だと、レポート サーバが使えない等の制限がある。

SQL Server 2008 R2 Expressはインストール済み。
ダウンロード:ダウンロード詳細 Microsoft SQL Server 2008 R2 RTM - Express

基本的なインストール手順は、Windows Server 2008 R2上に入れる場合と同じ。
(過去記事は、TFS 2008からの移行の手順になっています。)

 

評価版の入手方法

Visual Studio 2010 や Team Foundation Server 2010 を持っていない場合、評価版をダウンロードしてテストする事が出来る。

Visual Studio 2010 のダウンロード - Microsoft Visual Studio
日本マイクロソフトのVisual Studio 2010のダウンロードページhttp://www.microsoft.com/japan/visualstudio/download

 

 

TFS 2010をインストール

メディアをセットしてTeam Foundation Server 2010のインストールを開始する。

TFS2010セットアップ1 [次へ]で進む。

TFS2010セットアップ2[次へ]で進む。

TFS2010セットアップ3

[インストールする機能]が初期状態で×になっていたのでチェックを入れて[インストール]で進む。

TFS2010セットアップ3

[Team Foundation Server 構成ツールを起動する]のチェックを外して[完了]。

 

SP1のインストール

TFSの構成を始める前にService Pack 1をインストールしておく。

ダウンロードする場合ここから → ダウンロード詳細 Microsoft® Visual Studio Team Foundation Server® 2010 Service Pack 1

TFS2010SP1-KB2182621.exe を実行するとインストーラが起動する。

TFS 2010 SP1セットアップ1[次へ]で進む。

TFS 2010 SP1セットアップ2[次へ]で進む。

TFS 2010 SP1セットアップ3[完了]で進む。

 

Team Foudation Serverの構成

今回はWindows 7上の小規模テスト環境なので、サーバ1台の非AD環境。
SQL Server Expressサービスは起動状態にして構成を開始。

スタートメニューから[Microsoft Team Foundation Server 2010]⇒[Team Foundation Server 管理コンソール]を起動する。

スタートメニュー

 

管理コンソール

管理コンソール

[アプリケーション層]ノードを選択。
[インストール済みフィーチャーの構成]をクリック。

構成センター1

[基本]を選択して、[ウィザードの開始]。

基本構成ウィザード1

【重要】上段にある[ここをクリックしてください]をクリックして注意点を確認する。

2011/05/22現在では、Team Foundation Server 2010 SP1がリリースされている旨が表示されている。
既にインストール済みなので次に進む。

[次へ]をクリックして進む。

基本構成ウィザード2

SQL Server Expressがインストールされていない場合、ここでインストールする事が出来る。
既にインストール済みなので、[次へ]。

基本構成ウィザード3

SQL Serverのインスタンスは自動的に表示される。[次へ]で進む。

基本構成ウィザード4

内容を確認して[次へ]。

基本構成ウィザード5

チェックでエラーが発生し、解消方法が下部に表示される。

コマンド プロンプトで次のコマンドを実行する。
sqlcmd -E -S "サーバーホスト名\SqlExpress" -Q "ALTER LOGIN [サーバーホスト名\ユーザ名] WITH NAME = [サーバーホスト名\ユーザ名]"

[準備チェックを再実行するには、ここをクリックしてください]をクリックして再チェック。

基本構成ウィザード6

今度は成功したので[構成]をクリック。

基本構成ウィザード7

[次へ]で進む。

基本構成ウィザード8

あっけなく正常に構成が完了した。(初代から比べて、ずいぶん簡単になった)

構成センター2

[閉じる]でいったん閉じる。
アプリケーション層の構成が完了すると、管理コンソールに設定表示される。

管理コンソール2

スクロールして一通りの設定を確認しておく。

管理コンソール3

TFSからビルド結果やアラートなどをメールで通知する事が出来るので、これを設定しておく。

[電子メール通知の設定]の[通知の設定]をクリックしてメール送信の設定を行う。

電子メール通知の設定

入力して[OK]を押せば完了。

 

ビルド構成

Team Foundation Serverでは、ビルドをサーバ上で実行する事が出来、ビルド方法も色々カスタマイズ可能になっている。
TFS2010のチーム ビルド(自動ビルド) -- C#.NETでいく?

自動ビルドを実行するため、ビルド構成を行う。

管理コンソール4

[ビルド構成]ノードを選択して、[インストール済みフィーチャーの構成]をクリックする。

構成センター

[ウィザードの開始]をクリック。

ビルド サービス構成ウィザード1

[次へ]で進む。

ビルド サービス構成ウィザード2

[次へ]で進む。

ビルド サービス構成ウィザード3

ビルド エージェントの数を指定する。ビルド エージェントは後から追加する事が可能なため、ここは1のままで[次へ]で進む。

ビルド サービス構成ウィザード4

ビルド実行アカウントを指定する画面。
他のシステムと連携する際には、他のリソースへのアクセス権を持つアカウントを指定しておいた方が楽。
そのようなアカウントが無い場合は、チーム ビルド用のアカウントをADに新規登録して指定する。
(後で、リソースにアクセス権を追加する事で管理が容易となる。)

ここでは、評価用PC内での事なので、SYSTEMアカウントを指定して[次へ]。

ビルド サービス構成ウィザード5

内容を確認して[次へ]。

ビルド サービス構成ウィザード6

[構成]をクリックする。
(構成を実行中にエラーが発生した)

ビルド構成エラー

・・・ビルド構成の途中で管理コンソールがビルド サービスにアクセスしたようだ。
少し待ってから[はい]をクリック。

ビルド サービス構成ウィザード7

ビルド構成が成功。[次へ]で進む。

ビルド サービス構成ウィザード8

これで、ビルド サービスの構成が完了。[閉じる]で進む。

構成センター3

[閉じる]で進む。

管理コンソールのビルド構成

管理コンソールの[ビルド構成]にビルドのサービス状態が表示される。

  • ビルド サービス
    再起動のリンクがあればサービスが起動している。
  • コントローラ
    コントローラの右側に灰色で[準備完了]と表示されていれば動作している。
  • エージェント
    エージェント数値の右側に灰色で[準備完了]と表示されていれば動作している。

動作していない場合、しばらく待ってみる。
3つが起動しない場合、ビルド サービスを[中止]してから再度起動する。

ビルド サービスを止めると、コントローラ、エージェントも自動的に停止する。
停止状態が表示されるまで、ちゃんと待ってから起動する。

 

VS2010から接続してみる

Visual Studio 2010 SP1を起動して[チーム エクスプローラー]を表示する。

チーム プロジェクトの接続

[チーム プロジェクトへ接続]アイコンをクリック。

チーム プロジェクトへ接続画面

いきなり自サーバが選択されていた。
(表示されていない場合、[サーバー]をクリックして[追加]する必要がある)

[接続]をクリックして成功すると、[チーム エクスプローラ]にサーバとお気に入りが表示される。

VS2010

これでTFSのインストールは完了。

TFS2008までは、クライアントOSでの動作は不可だったが、タスクとソース管理だけでも良い場合の選択肢が増えたことがうれしい。

ただ、SQL Server Expressの制限事項に注意する必要がある。

ここまで使えるSQL Server Express Edition - @IT

SQL Server 2008 R2 Expressであれば、データベースサイズの最大が10GBまで拡張されている。
それ以前は、4GBまで。
Team Foundation Serverのソース管理にドキュメント等を格納すると結構容量を使うので、
チームで長期にTFSを使用するならExpressではなく、製品版のSQL Serverを使用する方が安心。

 

TFSに関するまとめページ:Team Foundation Server

2011年2月13日

TFS2010ビルド テンプレートのカスタマイズ(3) TF215097対処 TFS2010ビルド テンプレートのカスタマイズ(3) TF215097対処

前回は、Team Foundationビルドの”ビルド テンプレート”をカスタマイズしたが、ビルド実行してみるとTF215097エラーになった。

ビルド テンプレートの編集はVisual Studio 2010のワークフロー デザイナで行い、独自DLL内のアクティビティを追加したものです。

今回は、TF215097の解決方法を調べる。

 

TF215097 エラーとは?

今のところMSDNには公式情報は見つからない。(MSDN内で検索するとフォーラム内のポストは見つかる)

今回のエラーのメッセージ:

TF215097: ビルド定義 \BuildCustomTest\MyCustomBuild のビルドの初期化中にエラーが発生しました: 不明な型 '{clr-namespace:CustomBuildActivity}MyBuildActivity' を作成できません。

TF215097が、ビルドの初期化エラーのコードなのか、不明な型のエラーのコードなのかは分からない。

メッセージとしては、独自追加したアクティビティのクラスが見つからないと言っている。

 

ビルド エージェントに設定が必要

Visual Studio 2010上でTeam FoudationビルドでのDLL参照を設定できるUIは見つからない。

サーバーで、”Team Foundation Server 管理コンソール”を確認すると項目が見つかった。

Team Foudation Server 管理コンソール画面

ビルド コントローラの[プロパティ]を表示すると、[カスタム アセンブリのバージョン コントロール パス]の設定がある。

image

カスタム アセンブリでMSDN:「ビルド コントローラーの作成と使用」に説明されている。

このフィールドを使用すると、以下の種類のアセンブリをビルドで利用できます。

  • カスタム ワークフロー アクティビティを含むアセンブリ

  • カスタム MSBuild タスク

このフィールドで指定したフォルダーの下位にある任意のフォルダーに、この種類のコードをチェックインできます。

つまり、カスタム ワークフロー アクティビティをビルド定義に追加した場合、ビルド コントローラにソース管理上のパスを指定する必要がある。

ただ、1つのビルド コントローラに対して1つのパスしか指定する事が出来ない。
複数の”ビルド テンプレート”を複数の”チーム プロジェクト”で共有する場合も同じフォルダを使用する事になる。

いくつか管理方法を考えてみる:

  1. ビルド テンプレート毎にサブフォルダを作成する
    カスタム アセンブリが参照する共有DLLがある場合、各サブフォルダにチェックインする必要がある。
    共有DLLに変更が発生した場合にチェックイン忘れが発生しそうだ。
  2. 複数のカスタム アセンブリを指定フォルダに入れる
    カスタム アセンブリが参照する共有DLLも同じフォルダになるので、チェックインの手間も少なくなる。
    ただし、変更時の影響範囲が大きくなる。
  3. ソース管理のルート”$/”を指定する
    どこにでも置くことが出来るようになるが、カスタム アセンブリの検索に時間がかかりそう。
    また、万一異なるフォルダにDLLが存在した場合、どれが使われるか不明となる(ビルドエラーの解消が大変)

今回は2番目の方法でいく。
フォルダは専用に作成した方が良いが、今回は自動作成されたビルド プロセステン プレートのソース管理パスを使用する。

カスタム アセンブリの設定

 

チーム プロジェクトを分岐した場合も、同一フォルダのカスタム アセンブリが使用される事となる。

従って将来カスタム ワークフロー アクティビティの処理を変更する場合、参照しているビルド テンプレート全てに適用するなら単純にチェックインすればよい。
そうではない場合、出来るだけ ビルド テンプレートのパラメータとビルド定義のパラメータを追加することで対処することを考える。
(ビルド テンプレートのパラメータは初期値が指定できる為、古いビルド定義は編集する必要がなくなり、新しい動作とするビルド定義のみパラメータを変更すればよい)

 

カスタム ワークフロー アクティビティを含むアセンブリをチェックイン

ビルド済みのDLLを上で指定したソース管理パスにチェックインする必要がある。

”CustomBuildActivity"プロジェクトをリリース ビルドする。

プロジェクトのフォルダをエクスプローラで開き、bin\Release フォルダから[ソース管理 エクスプローラ]の”$/BuildCustomTest/BuildProcessTemplates”にドロップして追加した後チェックインを行う。

 

再度Team Foundationビルドを実行

[チーム エクスプローラー]を開き、”MyCustomBuild"を選択して、[新しいビルドをキューに配置]を実行する。

image

 

残念ながら、TF215097エラーとなってしまう。

TF215097: ビルド定義 \BuildCustomTest\MyCustomBuild のビルドの初期化中にエラーが発生しました: 不明な型 '{clr-namespace:CustomBuildActivity}MyBuildActivity' を作成できません。

ビルド コントローラにカスタム ワークフロー アセンブリのパスを指定するだけではダメなようだ。
(それとも、TFSがバグっている? ぐっと堪えてもう少し調査)

 

ビルド プロセス テンプレートの中身

完全に試行錯誤になってしまった。
上手く行ったときは再度まとめる必要がありあそうだ。

問題は「ビルド コントローラがXAMLを読み込んで、カスタム アセンブリを解決する処理が失敗している」事。
まず、”MyBuildActivity”がワークフローXAML内でどの様に記述されているか確認する事から始める。

”MyCustomBuildProcessTemplate.xaml” をテキスト エディタで開く。

479行目付近に ”MyBuildActivity” が記述されている。ネーム スペースは “local” になっている。

MyBuildActivityの定義画像

 

ネーム スペース “local” は1行目に xmlns:local="clr-namespace:CustomBuildActivity" として定義されている。

localネームスペースとの定義画像

ここで、他のネーム スペース定義には、”assembly=” があるものがある。
アセンブリ指定が無いために見つからないのだろうか?

テキスト エディタでアセンブリ指定を追加:

アセンブリ指定を追加

チェックインして再ビルド・・・TF215097エラー。

アセンブリのパスはビルド コントローラに指定していて、XAML内にアセンブリ名も書いている。

根本的に何かが足りないようだ。

 

カスタム アクティビティ クラスに属性を追加

日本語のサイトには有効な情報が全く無い・・・
しばらく探していたら、やっと見つけました:
Ewald Hofman - Customize Team Build 2010 – Part 7- How is the custom assembly found-

要するに、Team Foundationビルドに使用するカスタム アクティビティには特別なクラス属性を付けてやる必要がある。

具体的には、”Microsoft.TeamFoundation.Build.Client.BuildActivity” クラス。

 

まず、CystomBuildActivityプロジェクトに”Microsoft.TeamFoundation.Build.Client"のバージョン 10.0.0.0への参照を追加する。

Build.Clientアセンブリ参照を追加

参照を追加した状態

 

次に、ビルド アクティビティにクラス属性を追加する。

[Microsoft.TeamFoundation.Build.Client.BuildActivity(Microsoft.TeamFoundation.Build.Client.HostEnvironmentOption.All)]

 

属性を追加したコード:

クラス属性を設定したコード

 

リリースビルドして、”$/BuildCustomTest/BuildProcessTemplates”の”CustomBuildActivity.dll” をチェックアウトして上書き後、チェックインしてTeam Foundationビルド “MyCustomBuild"を新しくキューに追加。

ビルドが成功した:

やっとビルドが成功した

 

念のため、”MyCustomBuildProcessTemplate.xaml”にテキスト エディタで行ったassembly指定を外してビルドするとエラーとなった。

簡単にまとめると次の3つの条件を満たす必要がある事が分かった。

  • カスタム ビルド アクティビティ にはクラス属性が必要
    [Microsoft.TeamFoundation.Build.Client.BuildActivity(Microsoft.TeamFoundation.Build.Client.HostEnvironmentOption.All)]
  • ビルド テンプレートXAMLのネームスペース定義にはassembly指定が必要
  • ビルド コントローラにアセンブリ参照パスの指定が必要
    ソース管理上のパスである必要があるため、カスタム ビルド アクティビティを含むdllをチェックインする必要がある。

 

次回は、テキスト エディタで編集する必要がないワークフローXAMLの管理方法を検討する。

2011年1月16日

TFS2010ビルド テンプレートのカスタマイズ(2) TFS2010ビルド テンプレートのカスタマイズ(2)

前回はビルド テンプレートを新規に作成してTeam Foundation ビルドが成功することを確認した。

今回は、作成したビルド テンプレートの中身を確認して、独自のワークフロー アクティビティを追加してみる。

 

ビルド テンプレートを取得

作成したビルド テンプレートはソース管理に登録されているが、ローカルには無い状態になっている。
まずは、ソース管理エクスプローラで最新版を取得する。

ソース管理エクスプローラを開き、”$/BuildCustomTest/BuildProcessTemplates”を展開する。
”MyBuildProcessTemplate.xaml”を選択して[最新バージョンの取得]を実行する。

最新バージョンを取得すると濃い文字で表示される

このままダブルクリックすると、ワークフロー デザイナが表示されて確認・編集出来る。

自前のアクティビティを使用する場合はアクティビティを含んだDLLをGACに登録する必要がある。
(ツールボックスに表示されるようにするため。XAMLをテキストエディタで直接編集する場合は必要ない。)
GACに登録する方法をとると、別の開発マシンでもビルド テンプレートの編集時にGACに登録しなければエラーが表示されてしまう。

これらの回避の為、今回は自前のアクティビティを生成するワークフロー アクティビティ プロジェクトにビルド テンプレートを追加して編集する。

 

アクティビティ プロジェクトにビルド テンプレートを追加する

[CustomBuildActivity]プロジェクトのノードを選択して、[追加]→[既存の項目]を実行する。

フィルタを”XAMLファイル”に変更して、上で取得した”MyBuildProcessTemplate.xaml”を選択して[追加]を行う。
(ローカルマシン上のファイルパスが分からない場合、ソース管理エクスプローラに[ローカル パス]としてリンクが表示されている)

都合上、”MyBuildProcessTemplate.xaml”とはソース管理上別ファイルとなるため、 ”$/BuildCustomTest/BuildProcessTemplates” はソース管理から削除しておく方がよい。

ここでは、プロジェクトに追加した方を別名に変更する。 (むしろ最初から、プロジェクトのフォルダに生成すればよかった。)

プロジェクトに追加された ”MyBuildProcessTemplate.xaml” を ”MyCustomBuildProcessTemplate.xaml” に名前変更する。

名前を変更した

”MyCustomBuildProcessTemplate.xaml” をダブルクリックで開いて内容を見てみる。

 

ビルド テンプレートのワークフローを確認する

ワークフロー デザイナで ”MyCustomBuildProcessTemplate.xaml” を開き[全て折りたたみ]したのが次の図。

ビルド テンプレートの中身

シーケンシャル ワークフローで構成されていて、4つのアクティビティに分かれている。

  • ビルドの取得
  • 格納場所の更新
  • エージェントで実行
  • CheckInSerlveset ビルド
    ゲート チェックインを行っている場合のシェルブセットのチェックイン処理部分。

以外とシンプルに見えるが、ビルドの取得以外の中身は盛りだくさんになっている。

[エージェントで実行]部分がコンパイル等のメイン処理になっている。ダブルクリックで中身を開く。

エージェントで実行部分

 

この部分も大きく4つのアクティビティで構成されている。

最後の[変更セットと作業項目のコンパイル、テスト、および関連付けを試す]部分で、ビルド定義に指定されているプロジェクトを順にビルドする。

全てのビルドが成功した際に何らかの処理を行うのなら、この中の都合の良い部分にカスタム処理を挿入する。

Team Foundation ServerおよびWFに付属の標準のアクティビティを使用してカスタマイズする場合は特に問題はない。
プロセスを起動するだけならばTFS付属のアクティビティに”InvokeProcess”ある。

InvokeProcessアクティビティ

(TFS2008の時はそれだけでも大層な仕掛けが必要だったけど・・・)

 

 

独自アクティビティを追加

自前のアクティビティを追加してみる。
(この辺りでネット上にはあまり情報がまだ無いので試行錯誤になるかもしれない)

[エージェントで実行]を開き[変更セットと作業項目のコンパイル、テスト、および関連付けを試す]の最終段に先に作成した”MyBuildAcitivity”を追加する。

”CustomBuildActivity"プロジェクト内でビルド テンプレート ファイル(XAML)を開いているため、ツールボックスにアクティビティが表示されている。image

 

これをシーケンスの最後に追加する。

image

”CustomBuildActivity"は、Textパラメータを受け取るだけで何もしないアクティビティです。
このTextパラメータにビルド定義から値を指定できるようにしてみます。

 

ビルド定義に表示されるパラメータを追加

デザイナ下部にある[引数]ボタンを押すと、ワークフローに対する引数一覧が表示される。

引数の指定

一番下までスクロールして[引数の作成]を行う。(ここでは、”MyBuildText”を作成している)

 

アクティビティに引数の値を渡す

”MyBuildAcitity”を選択して[プロパティ]を表示する。
”Text”プロパティに”MyBuildText”引数を指定する。

image

簡単ではあるがこれで完成。

ワークフローを保存する。

 

ワークフローをビルドから除外

CustomBuildActivityプロジェクトの出力には、ワークフローXAMLは必要ないため、ビルドから除外する。

”MyCustomBuildProcessTemplate.xaml”のプロパティを表示して[ビルドアクション]を ”なし”に変更する。

image

ソリューション エクスプローラで”CustomBuildActivity”を選択して、[チェックイン]を実行する。

 

Team Foundation ビルドのビルド定義を変更

チーム エクスプローラを表示して、”MyCustomBuild"ビルド定義を編集する。

プロセスを選択して、[ビルド プロセス テンプレート]の詳細を表示して、[新規作成]ボタンを押す。

[既存のXAMLファイルを選択]を選び、上で作成した ”MyCustomBuildProcessTemplate.xaml” を選ぶ。

[OK]ボタンを押す。(実際には新規作成はされずに、 “BuildCustomTest” プロジェクト内のXAMLを参照するようになる。

パラメータの図

正しく、選択すると、[ビルド プロセス パラメーター]の表示が更新されて、その他グループに “MyBuildText” が表示される。

このように、ビルド プロセス テンプレートに追加した独自引数は[その他]カテゴリに表示される。
システム定義の引数のようにローカライズはされない(現在方法が見つからない)

この状態で保存する。

以上でカスタム アクティビティの追加が出来る。

独自アクティビティを拡張すれば、複雑なアクティビティもワークフローに追加ができる。

この状態で、ビルドをキューに登録すると実はTF215097エラーが発生する。

ビルドエラー

概要
他のエラーと警告
エラー 1、警告 0
TF215097: ビルド定義 \BuildCustomTest\MyCustomBuild のビルドの初期化中にエラーが発生しました: 不明な型 '{clr-namespace:CustomBuildActivity}MyBuildActivity' を作成できません。

 


TF215097の対処は次回

2011年1月10日

TFS2010ビルド テンプレートのカスタマイズ(1) TFS2010ビルド テンプレートのカスタマイズ(1)

前回は新規チーム プロジェクトを作成してビルド定義の内容を確認した。

ビルドテスト用のチーム プロジェクト”BuildCustomTest”にプロジェクトを作り、Team Foundationビルドを試す。

先にお詫びしておくと、WFは全然手を出していなかったので多分に間違っている可能性があります。
ビルド テンプレートが ”ワークフロー XAML” になっているため、判らないながら進めます。
間違いや良い方法がありましたら、ご指摘をお願いいたします。

 

プロジェクトの作成とチェックイン

VS2010を起動して、新規プロジェクトを作成する。
後で使えるようにWorkflowの中の[アクティビティ ライブラリ]テンプレートを使用。

新しいプロジェクト ダイアログ

名前:”CustomBuildActivity"
場所は、ワークスペースのBuildCustomTestにしておく。

[OK]でプロジェクトを作成すると、ソース管理にも登録される。

ソース管理状態

 

ソリューション エクスプローラにはアクティビティ ”Acitity1.xaml” が追加されている。

ソリューション エクスプローラ状態

 

”Acitity1.xaml” アクティビティは削除してコード アクティビティを追加しておく。

コードアクティビティの追加

後で見つけやすくするため、名前を”MyBuildActivity.cs”にしておく。[追加]で作成される。

コードアクティビティのコード

とりあえず、アクティビティの中身はいじらずにそのままビルド。

成功したら、[ソリューション エクスプローラ]の[ソリューション ノード]を選択して[チェックイン]を実行。ソース管理に登録する。

各ノードがチェックイン状態になる

これでTeam Foundation ビルドを定義することが出来ます。

 

新規ビルド定義の作成

チーム エクスプローラを開いて[ビルド]ノードを選択、

image

[ビルド定義の新規作成]を実行する。

全般タブ:名前を”MyCustomBuild”に変更する

ビルドの規定値:ビルド コントローラとしてTFS2010を選択。ビルドの出力先をサーバ上の共有フォルダを指定

プロセス:ビルド プロセス テンプレートの詳細を開き、[新規作成]ボタンを押す。新しいファイル名を”MyBuildProcessTemplate.xaml”に変更して[OK]を押す

ビルド テンプレートの新規作成ダイアログ

この時点で”MyBuildProcessTemplate.xaml”は、ソース管理に登録されている。

ソース管理にテンプレートが追加された

MyCustomBuildを保存すると、チーム エクスプローラの[ビルド]ノード下に表示される。

カスタムビルド定義が追加された

以上で標準のビルド定義が出来上がった。

 

ビルドの実行

[MyCustomBuild]ノード選択して[新しいビルドをキューに配置]を実行する。

image
デフォルトのまま、[キューに配置]で進める。

ビルド エクスプローラが表示される。

image

ビルドが成功すると、緑のチェックマークが付く。

image

ビルドの出力先に指定したフォルダに生成物が配置されます。

image

以上で、カスタマイズ前のビルド テンプレートが正しく動作する事が確認できました。

次回は、作成したビルド テンプレートの中身を確認、独自アクティビティを追加します

新規プロジェクトのビルド テンプレート(TFS2010) 新規プロジェクトのビルド テンプレート(TFS2010)

TFS2010のTeam Foundation ビルドのカスタマイズをする前に、まずは標準のビルド テンプレートを確認してみる。
最終的にTFS2008から移行したプロジェクトでMSBuildカスタマイズを2010方式に移行するのが目的だ。

TFS2010で新規にチーム プロジェクトを作成して2008と比較しながら、プロセス定義を中心にビルド テンプレートを確認する。

 

新しいプロジェクトの作成

[チーム エクスプローラ]でルートノードを選択して[新しいチーム プロジェクト...]を実行する。

チーム プロジェクトの作成画面

チーム プロジェクト名に”BuildCustomTest”として[次へ>]で進む。

プロセステンプレートの選択画面

テンプレートに[MSF for CMMI Process Improvement v5.0]を選択して[次へ>]で進む。

チームサイト設定画面

デフォルトのまま[次へ>]で進む。

ソース管理の設定画面

デフォルトのまま[次へ>]で進む。

確認画面

[完了]で進む。

完了画面

[閉じる]で作成完了(チーム プロジェクトの作成自体はTFS2008と殆ど同じですね)

チーム エクスプローラに作成したプロジェクトが表示されます。

チーム エクスプローラ

 

ビルド定義作成

まずは、デフォルトのビルド定義を作成してTFS2010での基本的な設定を確認する。

[ビルド]ノードを選択して[ビルド定義の新規作成...]を実行する。

ビルド-全般設定

[全般]、[トリガー]、[ワークスペース]、[アイテム保存ポリシー]はデフォルトのままとする。

[ビルドの規定値]の設定

ビルド-ビルドの規定値

ビルド コントローラを選択する。また、出力フォルダに共有フォルダを設定する。
ここまでは、TFS2008と同じ。

いよいよ核心のプロセスの設定をみる。

[プロセス]:

ビルド-プロセス

全く変わってますね。

ちなみに下図はTFS2008の対応する[プロジェクト ファイル]画面。

TFS2008-プロジェクトファイル画面

前記事「TFS2010のチーム ビルド(自動ビルド)」に書きましたが、これが今回調べる中心項目です。

 

プロセスの各項目

右ペインの上部に簡単な説明があります。

Team Foundation ビルドは Windows Workflow(XAML)ファイルで定義されているビルド プロセス テンプレートを使用します。このテンプレートの動作は、選択したテンプレートで提供されるビルド プロセス パラメーターを設定することでカスタマイズできます。

”Team Foundation ビルドは Windows Workflow(XAML)ファイルで定義されているビルド プロセス テンプレートを使用します。このテンプレートの動作は、選択したテンプレートで提供されるビルド プロセス パラメーターを設定することでカスタマイズできます。”

分解すると・・・

  • ”TFSBuild.proj”は使わなくなって、”ビルド プロセス テンプレート”を使うようになりました
  • ”ビルド プロセス テンプレート”はXAMLで記述しますよ
  • テンプレートは選択することが出来ます(←カスタマイズできます)
  • テンプレートにパラメータを持たせてビルド定義で指定することが出来ます(←簡単なカスタマイズならテンプレートをいじらなくてできる)

 

ビルド プロセス テンプレート

説明の下に[ビルド プロセス テンプレート]の設定があります。
詳細を表示すると次のようになる。

ビルドプロセステンプレート選択(詳細表示)

 

ビルド プロセス ファイルの選択肢:

image

初期状態では3つ選択できるようになっている。
(TFS2008からのアップグレード インストールをしていない場合、アップグレード テンプレートは無いかもしれません。)

ソース管理の”BuildProcessTemplates"フォルダを確認すると、対応する3つのXAMLファイルが存在する。

ソース管理フォルダソース管理内のビルド プロセス ファイル

独自のテンプレートを作成してここに置く事でも選択が可能となる。

 

[新規作成...]でビルド プロセス ファイルの新規作成か既存ファイルの選択ができる。

新しいビルド プロセス テンプレートダイアログ

  • 既存のXAMLファイルをコピー
    ソース管理に存在するXAMLファイルをコピーして新たなテンプレートを作ることができる。
    新たなテンプレートを作成してカスタマイズする場合に使用する。
  • 既存のXAMLファイルを選択
    新規作成というボタン テキストに騙されてしまうが、ここで別チーム プロジェクトのビルド プロセス ファイルを選択することが出来る。
    つまり、複数チーム プロジェクトでビルド プロセスを共有することが可能となっている。
    TFS2010が画期的に異なる点だ。
    ビルド プロセス テンプレートの変更は1カ所だけで済む。
    (TFS2008では、MSBuildのターゲットを共有しようと思うと変更の反映が大変だった。)

 

[最新の情報に更新]ボタンは、ソース管理に直接ファイルを追加した場合に使用する。
追加したXAMLファイルをドロップダウンから選択可能となる。

 

ビルド プロセス パラメーター

ここで、ビルド プロセスに渡す引数を指定できる。

image

ビルド プロセス テンプレート(XAML)の引数に追加した項目はここに追加で表示されることになる。
これにより、複数のビルド定義で使いまわせるテンプレートを簡単に作成できる。(はず!)

個別の項目については別の機会に。

チーム プロジェクトにプロジェクトが存在しないので、必須の[ビルドする項目]が設定できないので、次回はプロジェクトを作成してビルト定義を実際に作成する

2011年1月 9日

TFS2010のチーム ビルド(自動ビルド) TFS2010のチーム ビルド(自動ビルド)

Team Foudation Server 2010 ビルド システムの概要から調べてみる。
TFS2008から大きく変わっているようだ。

 

呼び方が違う?!

まず、呼び名が異なる。

ちなみに「自動ビルド」という呼び方は、MSDNの中にも幾らか使われている。特にVisualStudio上でのビルド操作との相違を強調したい場合に記述されるようだ。

本ブログでは、TFS2010に関しては”Team Foundation ビルド”と呼びそれ以前の「チーム ビルド」と区別する。

 

ビルド システムの構成は同じに見える

「ビルド コントローラ」と「ビルド エージェント」の2層で構成されている。
ビルド構成

チーム ビルドをTFS本体とは別にインストールする必要があるのも変わっていないが、構成に関わる点の違いが1つある。

2010では、ビルド定義にタグ付けしてビルド エージェントへの振り分けを制御することが出来るようになっている。
以前のバージョンでは、チーム プロジェクト毎にエージェントがあった。(プロジェクト作成時に指定?だったかな・・・ビルド定義毎に指定はできる)

 

ビルド プロセス定義は大きく違う

ビルドシステムはTFSのバージョンが上がるたびに変わる物のようだ。
2005はDevEnvで、2008でビルド プロジェクトとMSBuildになって、今回は上位がWorkflowでバイナリ生成部分がMSBuildという構成になっている。

カスタマイズ性の向上と多彩なビルド&テストを制御できる構造に変わってきている。

ビルト プロセス定義の違いの取っ掛かり:

  TFS2008 TFS2010
ビルド プロセス定義パス $/プロジェクト/TeamBuildTypes $/プロジェクト/BuildProcessTemplates
ビルト タイプ TeamBuildTypes/任意名 なし
ビルド プロジェクト TFSBuild.proj なし
ビルド プロセス テンプレート なし BuildProcessTemplates/任意名
”DefaultTemplate.xaml”がデフォルト
”UpgradeTemplate.xaml”はアップグレードしたプロジェクト用
ビルド定義と関連 ビルド タイプのソース管理パスを指定 ビルド プロセス テンプレートを指定
カスタマイズ例 TFSBuild.projで独自のビルド ターゲット(MSBuild定義ファイル)を指定する。
独自ビルド ターゲットはTFS標準のターゲットをオーバーライドするように記述していく。
ビルド ステップの理解と記述が難解。
”DefaultTemplate.xaml”をコピーして独自のビルド プロセス テンプレートを作成する。
ワークフローXAMLの為VS2010のワークフロー デザイナで編集することが出来る。
デザイナ操作性を我慢できれば、ビルドのステップを直感的に理解できるし、編集も簡単。
DLLレベルの処理の追加 Team Foundation Serverに付属のクラスライブラリ内のTaskクラスから派生させた独自クラスを作成。
ビルド ターゲットでインポートして呼び出す。
DLLはビルドタイプのフォルダにチェックインする。
WFプロジェクトを作成して、普通のActivityとしてコーディングが可能。(操作対象がTFSである場合を除けば、TFS専用知識は殆どいらない)
WFの知識は必要。
チーム プロジェクト間のビルド プロセスの共有 出来ない(もしくは困難)
ビルドタイプ毎にビルド ターゲットと独自DLLをチェックインする必要がある。
(同一チーム プロジェクト内でも)
可能。
ビルド プロセス テンプレート以外は共用可能
ビルド プロセス テンプレートも共用可能。
独自処理を入れたActivity DLLをソース管理にチェックインすれば、ビルド コントローラで参照可能。
ビルド定義でのパラメータ変更 なし
ビルド プロセス テンプレート(ワークフローXAML)の引数が使用できる。
このため、同一プロセステンプレートを複数プロジェクトでそのまま利用することが容易となっている。

VS2008と比較してMSBuildのビルド ターゲットを触らなくて済むだけ、ビルドのカスタマイズに関しては楽になっている。
ほんとに楽にできるかは、次回以降に検証してみる

 

ビルドのトリガー

ビルドを開始するトリガーは”ゲート チェックイン”が増えている。

TFS2008のビルド トリガー:

TFS2008のトリガー

TFS2010のビルド トリガー:

TFS2010のトリガー

ゲート チェックインはVS2010から追加された新しい項目だ。
(これが本当に有効な時間で機能するのならば待望の機能と言える。)

MSDN:「ゲート チェックイン ビルドで制御される保留中の変更のチェックイン」

要するに、チェックインすると(ソース管理に入る前にジェルブされ、)ビルドが行われて(自動テストがあればテストまでされて!)ビルドが成功した場合だけチェックインが成功するというもの。
動かないソース(バグっているソース)のチェックインを未然に防げる。

チェックインに失敗すると、チェックインしようとしたソースはシェルブ状態になったままとなる。
何回かダイアログが表示されるような手順となる。
慣れないうちは、変更したソースを失うメンバーが1人や2人でそうだ。

実際に試していないので”今”有効に使えるかどうか何とも言えない。(問題はビルドの時間とテストの速度になるか)
もしだめでも、将来速くなれば使いたい機能だ。

 

ビルドログ

ビルド ログも進化していて、更に見やすくなっている。

これは、次回以降にする

TFS移行後、まずは自動ビルドを止める TFS移行後、まずは自動ビルドを止める

前回TFS2008からTFS2010に移行でチームビルドの構成を完了している。
設定が上手くいった場合、既に自動ビルドが「トリガー」待ちしているはず。

残念な事に、各チーム プロジェクトのビルド定義は移行前のマシンの設定のままになっている。
ビルド エージェントの指定はTFS2008の時のままですし、ビルド定義やビルド ターゲットにサーバ名や各種パスの指定も移行前の状態。

このまま、トリガーが発生したらTFS2008のビルド エージェントにリクエストが飛ばされてしまう。

従って、全てのビルド定義を見直すまでは、自動ビルドを止めておくのが良いと思う。

 

自動ビルドを止めるには

Team Foundation Server 管理コンソールを起動して、左のツリーから[ビルド構成]を選択する。

ビルド構成画面

右ペインの上部でビルド サービスの制御が出来る。

[中止(S)]をクリックしてビルド サービスを停止する。

ビルド サービスを停止した状態

ビルド コントローラとビルド エージェントも[停止]状態になる。

これで、自動ビルドは停止する。

移行したビルド定義はアップグレード用のビルド テンプレートが適用されている。
移行した場合、新規に作成したビルド定義と動作が異なっているため、自動ビルドの解説記事等と動作が異なるので注意しなければならない。

 

プロジェクトのビルド定義を無効に設定する

次に、ビルド サービスが起動した時に勝手にビルドが走らないようにするため、各プロジェクトのビルド定義を無効にしておく必要がある。
Visual Studio 2010で操作を行う。

VS2010を起動してチーム エクスプローラを開き、移行したTFS2010に接続する。移行に成功したチーム プロジェクトのうち自動ビルドを設定しているプロジェクトをすべて選択する。

 

各チーム プロジェクトの[ビルド]ノードを開き、含まれている全てのビルド定義を順に無効に設定する。

”ビルド定義を無効”にするには、対象のビルド定義を選択して[ビルド定義の編集]を実行する。

編集画面で[全般]項目の最下に[このビルド定義を無効にする(新しいビルドをキューに配置しない)]チェック ボックスがあるのでONにする。

image

保存すれば、チーム エクスプローラのビルド定義のアイコンが進入禁止に変わる。

ビルド定義が無効になっている

面倒ではあるが、おかしなビルドを行わない為に全部無効にしておく。

 

これで、勝手にビルドが始まることはない。

次に、TFS2010 ビルドシステムの変更点を簡単に確認する