アーカイブ化
TFSのバックアップって何やっているの?ちょっと覗いてみよう。
なーんか、TFSのフルバックアップが失敗するなーということで調査してみました。
TFSのバックアップには、TFS PowerToolsのバックアップツール(http://msdn.microsoft.com/ja-jp/library/ms253070.aspx)を利用しています。バックアッププランの作成については、りばてぃさんの記事がまとまっています。
TFS Advent Calendar Day 10~TFS 2010のバックアップとリストア~
まずはログの確認
何はともあれログの確認です。バックアップログはここに出力されます。→ C:\ProgramData\Microsoft\Team Foundation\Server Configuration\Logs
ログを確認すると、結構順調にバックアップを行なっているようなんだけれど、BackupSet(バックアップのカタログ?)の更新をしようとして、XMLのカタログファイルを読み込む段階でエラーになっているようです。
[Error @06:16:49.170] System.InvalidOperationException: XML ドキュメント (302906,36) でエラーが発生しました。 —> System.Xml.XmlException: ‘.’ (16 進数値 0×00) は無効な文字です。 行 302906、位置 36。
… 略 …
— 内部例外スタック トレースの終わり —
場所 System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
場所 Microsoft.TeamFoundation.PowerTools.Admin.Helpers.BackupSetSerializer.Load(String path)
場所 Microsoft.TeamFoundation.PowerTools.Admin.Helpers.BackupSetHelper.AddAndSaveBackupSet(String path, TfsBackupSet backupSet)
場所 Microsoft.TeamFoundation.PowerTools.Admin.Apply.TakeFullBackup.Run()
TFSのバックアップって何やっているの?
TFSのフルバックアップがやっていることを簡単にまとめると、次の4つになります。
- バックアッププラン定義ファイルの読み込み
- バックアップセットの作成
- バックアップの実行
- バックアップカタログの更新
バックアッププラン定義ファイルの読み込み
バックアッププラン定義ファイルは、バックアッププラン作成時にこのあたりに作成されます。→ C:\ProgramData\Microsoft\Team Foundation\Server Configuration\ConfigPT.xml
ConfigPT.xmlには、バックアップ対象のデータベースの一覧やバックアップ頻度、通知メール設定、レポーティングサーバーのバックアップキーファイルの場所など、バックアッププランの設定がすべて記述されています。
バックアップセットの作成
ConfigPT.xmlのTfsConfiguration, TfsCollections, TfsWarehouse, Reporting, Sharepointセクションからバックアップ対象のDatabase情報を取得し、バックアップセットを作成します。
バックアップの実行
Microsoft.SqlServer.Management.Smo.Backupクラスを利用して、ConfigPTから読み込んだDatabaseを順次バックアップしていきます。
バックアップカタログの更新
レストア時に参照するバックアップカタログを更新します。バックアップカタログはこのあたりに作成されます。→ バックアップフォルダー\BackupSets.xml
結局なんで落ちたの?
どうも、BackupSets.xmlがぶっ壊れていたようです。BackupSets.xmlを覗いたら、確かにこんな感じでXMLがぶっ壊れていました。
<TfsBackupSet Id="20120127033004" Time="2012/01/27 03:30:04">
<Databases>
<BackupSetDatabase Name="StateService_a02fc1fdb80b4052b21b6f5b74932695" File="" Parent="" />… 略 …
<BackupSetDatabase Name="WSS_Search_SVTFS" File="" Parent="" />
<BackupSetDatabase Name="Se
XMLを無理やり意味のある形に修正するか、壊れちゃったものは仕方ないとBackupSets.xmlを思い切って削除(!!)してもう一度フルバックアップをしてみましょう。もちろんBackupSets.xmlを削除すると、データベースのバックアップがあったとしてもTFSのバックアップシステムからレストアすることはできないので注意してください。
どうしたら良いかな?
Webで検索するとカタログファイルがぶっ壊れてしまったためにバックアップが失敗したり、レストアが出来なかったりと言った事例が見て取れます。ちょっと残念なんですが、カタログファイルは別途バックアップしておいたほうがいいかもしれません。
あともう一つ、ReportingServerのキーファイルはバックアッププラン作成時に作成されます。もしバックアップファイルを直に消すことがあっても、この子は消さないように注意しましょう。まぁ別途キーファイルを出力してあげればいいんですけれどね。
ふぅ、焦った。
TFSPreviewを使ってみる
さて、ソース管理はどうしようと考えた時に、まず思い浮かぶのがCodePlexなわけですが、そういえば少し前にTFSのPreviewサイトをアクティベートしたので、今回はこいつにいろいろな方法で接続してみます。
チームプロジェクトの作成方法は、下のブログの記事がよくまとまって参考になりました。
Windows Azure上でTeam Foundation Server:プレビュー版提供開始
ちなみに、長澤さんのブログのエントリーによると、60日間アクティブでないユーザーは削除されるそうなのでお気をつけを。
プロジェクトの作成
TFSPreviewにログインすると、Create team Projectというリンクがあるので、クリックしてプロジェクトを作成します。今回は「MobileSample」としておきましょう。ProjectTemplateはよくわからないので、「Microsoft Visual Studio Scrum 2.0 – Preview 4」にしておきます。
Visual Studioで接続してみる
Visual Studio 2010でTFS Previewに接続するためには、ダウンロードセンターからVisual Studio 2010 SP1 Team Foundation Server 11 Compatibility GDRをダウンロードしてインストールしておく必要があります。
Visual StudioからTFS Previewに接続する方法は、TFS2005,2008やCodePlexのチームプロジェクトに接続する方法と変わりません。
- Visual Studioのチームエクスプローラーから、チームプロジェクトへ接続ボタンをクリックし
- 接続サーバーを登録して
- 接続サーバーを選択して、
- 接続プロジェクトを選択します。
接続が完了すると、チームエクスプローラーには次のように表示されます。
Eclipseで接続してみる。
Javaなどで人気のIDE、Eclipseからもこれまでと同様、TFS Previewに接続することができます。Eclipseから接続する場合は、ダウンロードセンターから、Microsoft Team Explorer Everywhere 11 Betaにアクセスして、「TFSEclipsePlugin-UpdateSiteArchive-11.0.0-Beta.zip」をダウンロードしてください。ちなみに「TEE-CLC-11.0.0-Beta.zip」はWindowsのコマンドプロンプトやLinuxなどの各種Shellなどから、TFS Previewのデータにアクセスするためのコマンドラインインターフェイスです。
EclipseでTFS用の拡張機能をセットアップするには、Eclipseのメニュー→ヘルプ→新規ソフトウェアのインストールからインストールダイアログを開き、ダウンロードした「TFSEclipsePlugin-UpdateSiteArchive-11.0.0-Beta.zip」をアーカイブとして参照してインストールを行います。
インストールが完了したら、TFS用のパースペクティブを開いて、TFS Previewに接続します。パースペクティブを開くには、Eclipseメニュ→ウインドウ→パースペクティブを開く→その他からパースペクティブを開くダイアログを表示し、「Team Foundation Server Exlporing」を選択します。
追加された Team Explorerから、Connect To Team Foundation Serverを選択して、Visual Studioと同じようにTFS Previewのチームサイトを登録します。
見慣れた画面が表示されました。
PowerShellで接続してみる。
TFS 2011と同様にTFS “11”にもTFSを利用する上で便利な拡張機能であるVisual Studio Power Toolsが用意されています。この中から、Microsoft Visual Studio Team Foundation Server 11 Beta Power Toolsを利用すると、PowerShellでTFS Previewのデータ利用することができるはず。。。なんだけれど。。。結局上手くつながりませんでした。。。
以下足あとです。
PowerShellのコマンドレットがインストールされませんね。。。あれ?インストールダイアログに、PowerShellなんかを使うには、Team Exploer 11が必要ってでてますね。Visual Studio 2010 SP1 Team Foundation Server 11 Compatibility GDRとTeam Exploer 11って別モノだったんですね。
Team Exploer 11がインストールされていると、PowerShellのコマンドレットもインストールできるようになります。
以前のバージョンのWindows Shell拡張がインストールされている場合は、同居できないためこんなダイアログが表示されます。一つ前に戻ってWindows Shell Extension(x64)をインストールから除外するか、以前のバージョンをアンインストールしてください。
スタートメニューから、Microsoft Team Foundation Server 11 Power Tools → PowreShell Consoleを起動して、TFSサーバーの情報を取得してみます。
うーん、エラーになっちゃいますね。TFS 2010には問題なくつながるので、TFS 11 Previewに接続するにはもう少しパラメータが必要なんでしょうか。。。
ワークグループ構成のTFSでログインするユーザーを切り替える
この記事は、TFS Advent Calendarの12/20分の記事です。TFS Advent Calendar : ATND
(Live Writerの操作を間違って、フライングで16日に一度公開しちゃっていたんだけれど、素知らぬ顔でもう一度公開します。)
TFSでは構築時にTFSのユーザー管理をワークグループ(ローカルコンピューター)で行うか、ActiveDirectory(ドメインサーバー)で行うかを選択できます。ActiveDirectoryでTFSを構成した場合は、Windowsログイン時にユーザーが確定されるので、その認証情報を元にTFSにシングルサインオンできます。ワークグループモードで作った場合は、Windows側で認証されていないので、TFS接続時にユーザーIDとパスワードを入力してログインします。
とはいえ、ワークグループで作成しても、ユーザーIDとパスワードを入力する機会というのはほとんどありません。ほとんどの場合は、初回にTFSに接続した段階のユーザーIDとパスワードをIEがキャッシュとして持っているものを利用するからです。
ただ、TFSエクスプローラーにはログアウト的なメニューが存在しないので、一時的に別のアカウントでログインしたい場合や、ユーザーの変更などで別アカウントでログインしたい場合は、IEの設定を変更して上げる必要があります。
Visual StudioはIEのセキュリティー設定をもとにTFSに接続に行くので、IEのセキュリティー設定で毎回ユーザーIDとパスワードを入力するように変更します。
インターネットオプション>セキュリティー>TFSのセキュリティーゾーン(ここでは信頼済みサイト)>レベルのカスタマイズ
設定ウインドウの一番下にある、ユーザー認証を「ユーザー名とパスワードを入力してログオンする。」に変更します。
この状態でVisual Studioを起動すると、チームプロジェクト接続時にユーザー名とパスワードを聞いてくるようになります。
チームドキュメントの変更を受け取る
この記事は、TFS Advent Calendarの12/14分の記事です。TFS Advent Calendar : ATND
接続しているプロジェクトをチームエクスプローラーで見ると、ドキュメントツリーの下に幾つかのドキュメントを見て取れます。ここには、プロジェクトで共有するドキュメントなどを格納していくのですが、新しいファイルが追加されたり、ファイルが更新された際にメールで通知を受けるにはどうしたらいいでしょうか。
答え
SharePointの機能を利用して、通知を設定します。
TFSと言うよりも、TFSがポータルサイトに利用しているSharePointの機能なのですが、チームエクスプローラーのドキュメントフォルダーの実体は、そのチームプロジェクトのプロジェクトポータルがホストされているSharePointのリストになります。変更を購読したいリストの通知を設定すればいいだけです。
もちろん通知の機能を利用する場合は、ユーザーに対してメールアドレスが設定されている必要があります。TFSをアクティブディレクトリー構成で構築していれば問題ありませんが、ワークグループ構成で構築したい場合は、ユーザーに対してメールアドレスがうまく設定されない(というか、SharePointのユーザー設定からメールアドレスを設定できない)ので、SPUserの設定をどうにか書き換えて上げる必要があります。
PowerShellを利用したメールアドレスの設定についてはこちら
→ SharePointのユーザーをPowerShellで修正してみる。
プロジェクトポータルのURLがわからない(!?)場合は、チームエクスプローラのコンテキストメニューから、「プロジェクトポータルの表示」をクリックしてプロジェクトポータルを開くのが簡単です。
プロジェクトポータルを開いたら、サイドバーから通知を設定したいリストを選択し、リボンのライブラリを開きます。
ライブラリタブを開き、ブラウザーをそれなりに大きくすると、リボンに幾つかのアクションが見て取れます。ドキュメントが追加されたり、修正されたりした場合にメールによる通知が欲しい場合は、「通知」>「このライブラリに通知を設定」をクリックします。メーラーにアウトルックを利用している場合は、ライブラリタブの「Outlookに接続」を利用すると、ドキュメントをアウトルックで読んだり、更新を確認できるようになって便利です。
通知の設定画面が出てくるので、どの頻度で通知を受け取るか設定してOKボタンをクリックします。
誰かがドキュメントに、ファイルを追加するとこんなメールが来ます。
チームビルドでMSBuildファイルを利用する。
この記事はTFS Advent Calendarの9日目の記事です。
サイトはこちら:http://atnd.org/events/22819
TFS2010になってから、チームビルドがWFベースになってしまいついていけていない僕がいます。単純にソリューションファイルをビルドするだけならいいんだけれど、ビルドプロセスをいじり始めると途方にくれてしまいます。だって単純なビルドプロセスでも、こんなWFが作られるんだもん。。。修正する部分は一部分とはいえ、WF初心者にいきなりこれは辛い。
まぁ実際のところは、TFS2010のビルド定義はかなり汎用化されているので、一般的なソリューションファイルをビルドするだけのプロセスだったらデフォルトのテンプレートで事足りてしまうし、TechNetマガジンではできるだけビルドテンプレートのカスタマイズはするなとも書いてありますね。
http://technet.microsoft.com/ja-jp/magazine/gg265783.aspx#
TFS2010からはビルド定義がWFになったおかげで、ビルドプロセスが可視化されたのは嬉しいことなのですが、これまで自分で作ったMSBuild用のカスタムタスクもワサワサあるし、無料で使えるコミュニティーベースのタスクもある。それとは違う次元で自動生成されるビルドプロセスが大きくて理解しきれていないとかとか、ビルドプロセスを自分でカスタマイズするためにWFベースのビルドプロセスに乗り換えちゃうにはまだちょっと敷居が高いわけです。
MSBuildファイルをビルドプロセスに利用する場合は、ビルドのプロセス設定で、ビルドするプロジェクトにMSBuildファイルを指定します。
ビルドするプロジェクトを選択する画面では、ソリューションファイル(sln)の他に、MSBuildプロジェクトファイル(proj)も選択できます。ファイルのフィルターが(*.*proj)になっているので、VBのプロジェクトファイル(vbproj)やC#のプロジェクトファイル(csproj)も一緒に列挙されます。まぁこの子たちもMSBuildファイルですからね。
TFS Advent Calendar Day 4 SMTPプロキシを利用したTFSでのメール通知
TFS Advent Calendarの4日目です。
サイトはこちら:http://atnd.org/events/22819
TFSには、TFS内で発生したイベントの通知をメールで受け取る機能が備わっています。
この機能を有効にすると、毎日のバックアップが正常に終了しているか、実行したビルドが正常に終了したかなどをメールで受け取れるので、TFSを使った開発環境を運用する上では必須の機能になるでしょう。詳しくは、MSDNの「電子メール通知の構成および SMTP サーバーの指定(http://msdn.microsoft.com/ja-jp/library/ms400808.aspx)」を参照してください。
SMTPサーバーが標準以外のポートを利用していると、うまく設定できない
ただ、このメール通知機能ですが、ポート番号などを指定できないのでセキュリティーの都合などでSMTPサーバーが標準のポート(25)以外を利用している場合は、うまくSMTPの設定が行えません。
SMTPサーバーに smtp.xxx.xxx:10025みたいな設定ができない
SMTPのプロキシになってくれるソフトを探す。
Windows 2008 R2に付属するIISのSMTPでもおそらく可能(未検証)なんですが、今回はBlackJumboDogというWebサーバーやら、SMTPサーバーやら、プロキシサーバーやらの昨日を備えたサーバーソフトの集合体みたいなソフトウェアを利用してみます。BackJumboDogは下記のURLからダウンロード可能です。
サッポロワークス BlackJumboDog http://www.spw02.sakura.ne.jp/spw/bjd/
このエントリーを書くのに検索したら、作者さんがCLR/Hで発表したスライドを発見しました。
Black jumbodog 運転と改造のすすめ http://www.slideshare.net/furuya02/b-lack-jumbodog
BlackJumboDogはC#のソースコードも公開されていて、独自サーバーをBlackJumboDogに組み込むことも可能なようです。
SMTPサーバーをTFSに立てて対応する
実行するとこんな画面が起動するので、メニューバーから、オプション>プロキシサーバー>SMTPを選択します。
この画面では、SMTPプロキシを利用するのチェックをいれ、こんな感じで設定してあげればいいでしょう。
No | 設定項目 | 設定値 | 備考 |
1 | クライアントから見たポート | 25 | |
2 | 接続先ポート | 10025 | 接続するSMTPサーバーのサービスポートです。 |
3 | 接続先サーバー | xxx.xxx.xxx.xxx | 接続するSMTPサーバーのホスト名かIPアドレスです。 |
BlackJumboDogをサービス化する
BlackJumboDogのサービス登録の設定は、BlackJumboDogを管理者として起動し、メニューの起動/停止>サービス設定から行うことができます(サービス設定はBlackJumboDog停止中でないと選択できません)。
登録ボタンをクリックして、この状態になればサービスの登録は完了です。
TFSの管理コンソールからSMTPの設定を行う
Team Foundation Server 管理コンソールを開き アプリケーション層メニューで、電子メール通知の設定を行います。SMTPサーバーにlocalhostを、電子メール差出人アドレスに、有効な電子メールアドレスを設定してOKボタンをクリックします。
これでTFSで起動しているBlackJumboDog経由でメール通知が飛ぶようになります。
ここまでやったけれど、実は設定で簡単にポート番号を指定する方法があったりするのかな。。。
TFSでVB6のビルドって出来るんだ。。。
TFSのビルド関連を調べていて。VB6のソースコードをTFSでビルドしている記事を見つけた。まぁ、コマンドラインからビルド出来れば、ビルドスクリプトを組むことは出来るんでしょうが、やろうと思ったことがなかったので驚いた。
それはそうと、WFベースになったTFS2010のビルドスクリプトは、どこから手をつけていいのかわからないので、こういったハンズオン的な記事があると参考になる。
How to Build VB6 Apps with TFS Team Build 2010
#VB6って自動ビルドが必要なぐらい継続的にメンテナンス or 新規開発されているのかな。
#実はテキストエディターで修正してゲートチェクイン→ビルドな感じだったりして。
TFSビルドでMSB3216が出てビルドに失敗した。
ビルド定義を作っていたら、何故かうまく通らないプロジェクトがありました。
ビルドのログを見ると、コンパイルしたアセンブリをレジストリーに登録しようとして、MSB3216のエラーが出ているみたいです。なぜレジストリー登録??
。。。。。。あっ、そういえばビルドログにBC42102の警告も出ていたような。COMに公開してライブラリーを使いたいっていうので、Visual Studioのビルド時にCOMに登録する機能を使っている???
使っていました。デバック時はこいつがあると楽ですが、手作業でもCOMへの公開はできるので、TFSビルドに組み込む場合は、「COM相互運用機能の登録」をOFFにしときましょう。BC42102の警告自体は特に問題は無いのですが、重要な警告が埋もれてしまうのもいやなので、プロジェクトファイルに42102の警告を抑止する定義も入れておきました。
Team Foundation Server 2010 で新しいチームプロジェクトを作る。
ちょうど自分のあまり時間と、省電力で余っているPCがあったのでおうちにTFS2010を入れてみることにしました。
今回サーバーにしたのは、ASUSのEeeBoxで、AtomCPUのデスクトップタイプのPCです。メモリは2Gにしました。さすがにCPUの面で不安が残っていますがまぁいいでしょう。
インストール
とりあえずインストールはTFSのインストールガイドと@ITのリバティーさんの記事で、TFS2008のときも2005に比べ簡単になったーっていうイメージは合ったんですが、2010はさらに簡単になりましたね。
⇒ http://www.atmarkit.co.jp/fdotnet/introtfs/introtfs01/introtfs01_01.html
チームプロジェクトの作成
まぁ普通は、TFSをインストールしたユーザーでチームプロジェクトを作成するんでしょうが、今回はクライアントPCでVisual Studioのチームエクスプローラーでチームプロジェクトを作成してみようと思います。
TFSへの接続
とりあえず、Visual StudioでTFSに接続します。
Visual StudioからTFSに接続するためには、チームエクスプローラを利用します。もしインストールされていない場合は、TFSのインストールCDからインストールできます。また、インストール済みなのに表示されていない場合は、Visual Studioのメニューで、表示⇒チームエクスプローラから表示できます。
チームエクスプローラで、+ボタンをクリックして、TFSサーバーに接続します。すでに一度TFSサーバーに接続したことがあれば、サーバーの一覧がドロップダウンリストに表示されるので、接続先のサーバーを選択して接続ボタンをクリクします。
初めてTFSに接続する場合は、サーバーボタンをクリックして、新規にTFSサーバーを登録します。
チームプロジェクトの作成
チームエクスプローラーのコンテキストメニューから、新しいチームプロジェクトを選択してプロジェクトの追加を始めます。
プロジェクト名はお好きにどうぞ
プロジェクトテンプレートもとりあえずMSF for Agile Software Development 5.0でいいと思います。ここで選択したプロセステンプレートによって、作業項目の内容なんかが変わってきます。もし作業項目を利用しないのなら何でもいいです。
SharePoint(チームポータル)を作成する場合は新しいSharePointサイトを作成するにチェック
ソース管理データベースの設定、新規で作成する場合はそのまま次へ
設定内容を確認して確認ボタンをクリック
権限が問題なく設定されていれば、これで問題なくチームプロジェクトやチームサイトが作成されます。
つづく…
最近のコメント