TFSのジョブへのアクセス権変更

前回のADユーザ即時反映で、PowerShell実行時のユーザにはジョブ「AllJobs」に対してRead/Queueのアクセス権が必要であること、通常はTFS管理者に権限が割り当てられていると書きましたが、ユーザ追加の都度TFS管理者がシェルを実行するのが面倒なときは、開発者に権限を与えることができます。

“TFSのジョブへのアクセス権変更” の続きを読む

複数サーバでのTFS構築(2)

前回の続きです。

別サーバにアプリケーション層のみの追加を行います。
構築ウィザードで「アプリケーション層のみ」を選択します。
(余談ですが、このウィザードがあるおかげで構築がほんとに楽です)

指定するのは接続先データベースのみです。

007

ここで注意点ですが、元々のTFSサーバのサービスアカウントがドメインユーザ以外(NT AUTHORITY\LOCAL SERVICEなど)だと、こんなエラーになりますので、事前にサービスアカウントを変更しておきます。

008

自分はこれで半日ぐらい悩みました。ドメインアカウントを使用しろとMSDNにもちゃんと記載されているのですが、すっかり忘れました。

あとは構成チェックだけなのですが、もう1点エラーになる可能性があります。
AD環境ではほとんどないと思いますが、サーバがドメインに追加されていないとエラーになります。

009

構成ウィザードが正常に終了すれば、2台のTFSサーバで運用できます。

複数サーバでのTFS構築(1)

今回も検証ネタです。
「1台のSQL Serverに複数のTFSが接続できるか?」という話があったので確認してみようとしたのですが、ちょっと引っかかるとことがあったのでメモ代わりに残そうかと。
(今回はTFS2010で確認しましたが、おそらくTFS2012でも同じだと思われます)

TFSの構築パターンとしては
 ・基本
 ・標準の単一サーバ
 ・詳細
 ・アプリケーション層のみ
の4種類になりますが、複数サーバ構成ができるのは
 ・詳細
 ・アプリケーション層のみ
の2種類になります。

結論としては、TFSの高可用性のためアプリケーション層を複数サーバに構築すること(Team Foundation Serverファームの作成)は可能ですが、<del>SQL Serverをケチって</del>SQL Serverの台数を最小化するために、構築済みのTFS用SQL Serverを流用することはできないということになります。

具体的には、「とある部署でTFSが構築済みで、コレクション名としてDefaultCollectionを使用しているが、別部署でTFSを使用することになった。」といったときに
○高負荷が予想されるので、サーバを分離したい。コレクション名はDefaultCollectionでなくてもいい。
 →アプリケーション層サーバの追加でOK
○コレクション名をDefaultCollectionで使いたいし、SQL Serverは共用するけど完全に独立して運用したい
 →「詳細」パターンでのセットアップ→NG
となるということです。
(個人的にですが、部署単位で運用を分離したい場合、コレクション単位で部門ユーザを設定し、ビルドサーバは別々に構築するのがいいかなと思います)

あと、複数サーバで構築する際の大前提として、「TFSのサービスアカウントがドメインアカウントで実行されている」というのがありますので、ワークグループ環境では構築できません。

MSDN内に複数サーバでのTFS構築に関する資料がありますので、詳細はそちらで確認してみてください。
(「シナリオ : 既存のインフラストラクチャまたは複数のサーバーを使用した Team Foundation Server のインストール」)

参考程度ですが、NGパターンで構築した場合にどうなるかです。
2台目のサーバにTFSをインストールし、構成ウィザードを「詳細」で進めます。
データベースは1台目に構築済みのものを使用しますので、「SQL Server インスタンス」には1台目のサーバ名を入力します。

005

その後の設定は、プロジェクトの要望に合わせて適用に設定します。
こんな感じで最後の構成チェックまで進められますが、チェックでエラーになってしまいます。

006

エラーメッセージを見ると、データベース「Tfs_Configuration」が作成できないとでています。
このデータベースはコレクション別ではないので、どうしようもありません。

次は、OKパターン(アプリケーション層の追加)の構築概要についてです。

ビルドコントローラーが削除できないとき

TFS管理コンソールからコントローラーを削除しようとしたとき、こんなエラーに出くわしました。

001

別の仮想マシンにエージェントだけ構築していたのを忘れて、その仮想マシンをサクッと消してしまったのですが^ ^;

こんなときは、TFSに格納されている管理情報を編集してしまいます。
※あくまで自己責任で。

TFSのDBサーバで作業をします。(または、TFSのDBサーバに接続できる環境で)

SQL Server Management Studioを起動し、TFSのDBに接続します。
データベースの中から、「Tfs_<コントローラーが接続しているコレクション名>」を探します。
(通常は「TfsDefaultCollection」)

エージェント情報が格納されているテーブルは「tbl_BuildAgent」になります。
まずは格納されているレコードを確認します。
「tbl_BuildAgent」を右クリックし「上位1000行の選択」を選択すると、登録されているエージェントの一覧が表示されます。

002


003

削除対象のエージェントは「DisplayName」に登録されている内容で大体察しがつくと思いますが、よくわからない場合は、削除対象のコントローラーの「ControllerId」を「tbl_BuildController」から確認します。

004

あとは、クエリーで次のSQLを実行してレコードを削除します。(もしくは「上位200行の編集」で直接削除)
DELETE FROM tbl_BuildAgent WHERE ControllerId=[削除対象のコントローラーID]

※別な理由で、ゾンビエージェントだけ削除するときには、AgentIdも条件に含めてください。

TFS2010でWindowsPhone7プロジェクトを自動ビルド

とある方から「Windows Phoneでも自動ビルドとか自動テストとかできますか~?」と聞かれ、「できます」と返答させて頂いたのですが、ちょっと気になって実際に確認してみました。
自動ビルドについては、「準備する環境に条件がある」だけでした。

○確認環境について
 ・ワークグループ環境
  AD環境でもあまり内容は変わりません。
 ・ビルドサービス用アカウントを別途作成
  今回は「DTFSBuild」というユーザを作成しています。
  権限はUsersで問題ありません。
 ・TFSサーバは構築済
 ・プロジェクトコレクションのビルドサービスアカウントにビルドサービス用アカウント(今回はDTFSBuild)を追加

005

○OS/SDKのインストール
 
 まず、ビルドするためにはビルド環境にSDKをインストールする必要がありますが、SDKのサポートOSはWindows VistaとWindows 7ですので、サーバ系OSは使えません。
 TFSはクライアントOSにもインストール可能ですのでWindows7環境を作成します。
 ここがこのネタの最大のポイントになるのですが、必ず「32bit環境」で作成
してください。
 Windows Phone7ネタというよりかはSilverlightネタになるのですが、「64bit版のMSBuildではSilverlightプロジェクトがビルドできない」という問題があります。
 
 ※Visual Studio Engineering Teamのブログに64bit版MSBuildでのネタが掲載されています。
 64bit版Windows7でビルド環境を構築し、ビルドを実行すると、こんな感じでエラーになります。

004

 自分はこの原因がすぐにわからず、結構な時間ハマってました。orz

 次に、現時点でのWindows Phone SDKの最新版である7.1をインストールします。

 また、ビルド生成物の出力/共有フォルダを作成しておきます。
 →とりあえずなら共有フォルダ/ローカルセキュリティともに「Everyone:フルコントロール」でOKです。

○TFSのインストール/ビルド構成
 TFS本体のサーバは構築済の前提とし、ビルドサーバのみ構築しますので、インストールする機能を「Team Foundation ビルド サービス」のみ選択してインストールします。

001

 インストールした後は構成ウィザードに従ってビルドサービスを構成します。
 
 「ビルドコンピュータの構成」でビルドサービスを実行するユーザとして「DTFSBuild」を指定します。

002

○TFSチームプロジェクトの作成/Windows Phone7プロジェクトの作成/Windows Phone7プロジェクトの登録
 これらは普通に行ってください。

○ビルド定義の作成
 基本的には普通に作成しますが、他のビルドエージェントで実行されないように、エージエントを固定します。
 ビルド定義の「プロセス」-「エージェントの設定」-「名前フィルター」に、Windows7環境のエージェント名を指定します。
 (通常は「[コンピュータ名] – エージェント1」という名前になります)

003

これで、チームエクスプローラーとかから普通にビルドを実行できるようになります。

Team Exolorer Everywhereのライセンス変更

昔、「Visual Studio Team Explorer Everywhere 2010のライセンス」というタイトルでライセンスについて書きました。
(MSDN Ultimateか、TEEライセンスが必要)

ところが、いつの間にか(2011年8月)ライセンス変更が実施されており、TEEはTFS CALを持っていれば無償で使用できる
ようになっていました。
個人的には、とってもとってもありがたいことです。
TFS 11 Expressの使用条件が満たせるところであれば、Java開発者でも完全無償でTFS環境が構築できます。

※正式には、TEEの紹介ページVS2010ライセンスホワイトペーパーで確認頂ければと思います。

第3回 Team Foundation Server ユーザーズ勉強会に参加してきました

連続3回出席ですw

というか、今回はスピーカー
として参加です(lll゚Д゚)

勉強会のタイトルが「バニラTFS vs トッピングTFS」ということで、ほぼカスタマイズなしのTFSと、いろんなプラグインを追加したTFSの事例(?)の紹介でした。
自分はトッピングTFSの事例というか、プラグインの紹介をさせて頂きました。
(その時のスライドはここに置きました)

何が何だかわからないうちに話終えたという感じでしたw

今回はTFSを導入してみたいという方が多かったような気がしますが、座談会で
 ・ハマるポイントは??
 ・機能大杉で、どう使えば分らない
という意見がありました。
自分もいろいろハマりつつやってきたので、これからもいろいろ情報発信できればと思います。

TFS Advent Calendar Day 23 ~ PowerTools for Eclipse Dec 2011

この記事はTFS Advent Calendarの23日目の記事です。
サイトはこちら:http://atnd.org/events/22819

@kkamegawaさんの記事にも上がっていますが、12/15~16でPowerTools December 2011が公開されています。
今回は、その中から「Team Foundation Server Power Tools for Eclipse」を見てみます。
名前に「Server」とありますが、クライアント側で使用するEclipseに対する機能追加になります。
追加される機能としては、
 ・Alert Explorer
 ・Find in Source Control
 ・Work Item Templates
の3つになります。

○Alert Explorer
 「ビルドが終わった」「チェックインが完了した」「作業項目が割り当てられた」など、状況が変更したときに、通知してくれるように設定が行えるツールです。
 設定内容はこんな感じです。
 <作業項目関連>
 

Pte01

 <チェックイン関連>

Pte02

 <ビルド関連>

Pte03

 

 このイベントに対して、通知先を設定します。
 例えば、自分の作業項目の内容が変更されたときに通知してほしいときの設定画面はこんな感じです。

Pte13

○Find in Source Control
 ソース管理から、ファイル名/フォルダ名をキーワード検索するツールです。
 「誰かがチェックアウトした」「特定の人がチェックアウトした」という状態も指定できます。

Pte04


Pte05_5

 該当するフォルダ/ファイルが見つかると、一覧に表示されます。
 そのフォルダ/ファイルに対して、チェックアウトしたり、履歴を見ることもできます。

Pte06_2

○Work Item Templates
 作業項目入力用テンプレートが作成できるツールです。
 バグ登録するときに、いちいち「区分」「イテレーション」を選択したくないとか、タイトルに定形文言を入れるのが面倒とかいったときに使えるかと。
 テンプレートを作成した作業項目を選択します。

Pte07

 通常の作業項目入力画面と同じ画面が表示されるので、テンプレート化したい項目に対して事前にセットする内容を入力します。ここでは、タイトルに「追加作業:」、アクティビティに「開発」を入力します。



Pte12

 保存するときに、テンプレート名称を入力します。



Pte09_2

 テンプレートを使って作業項目を入力するときは、テンプレート名称を右クリックし、「New Work Item from Template(N)」を選択すると、事前に内容がセットされた状態で入力画面が開きます。

Pte10_2


Pte11_2

PowerToolsに対しても「Everywhere」を展開してくれています。
TFSとかAzureとか見ていると、「.NET開発者だけ」ではなく「全て開発者に」という雰囲気が強く感じられます。

TFS Advent Calendar Day 19 ~ ODataを使ってTFSサーバにアクセス:設定編

この記事はTFS Advent Calendarの19日目の記事です。
サイトはこちら:http://atnd.org/events/22819

前回は、OData Service for TFSのセットアップについて書きましたが、今回は設定についてです。結構強引なことをやってますので、ちゃんと知識のある方はちゃんとした方法で対応してくださいw

OData Service for TFSを動かすためには
 ・Windows Azure Compute Emulator上で動かす
 ・IIS 7.0上で動かす
という2つの選択肢がありますが、今回はIIS7.0上で動かす方法をとります。
なぜかというと、Windows Azure Compute Emulatorは、IPアドレスが「127.0.0.1」しか使えないので、公開するには適していないからです。

さて、設定手順ですが、「StartHere.html」-「Introduction」-「Run the OData Service loccaly, see the Configuration and Running the OData Service」にある「Running the Service outside the Windows Azure Compute Emulator (using IIS 7)」になります。
ただ、この手順に従うと、IISの80番ポートを使うことになりますが、TFSサーバでSharePointが稼働している環境だとポートが競合し、うまく動作しません。
今回は、IIS上に別サイトを作成し、OData用のポートを割り当てるようにします。

最初に、IISに別サイトを作成します。
IISマネージャーで「Webサイトの追加」を実行します。

Set08

設定内容は
 ・サイト名:ODataTFS
 ・アプリケーションプール:ASP.NET v4.0
 ・物理パス:OData Services for TFSインストール先の「code」フォルダ
 ・ポート:9999
にします。

Set17

作成できたら、OData Service for TFSをインストールしたフォルダの「code\ODataTFS.Web\Setup」にある
 ・InstallVisualCRedist.cmd
 ・InstallTFSObjectModel.cmd
を実行します。

次に、Microsoft Visual Web Developer 2010 Expressを管理者権限で起動し、「code\ODataTFS.sln」を開きます。
「ODataTFS.Web」がスタートアッププロジェクトになっているのを確認してください。
(デフォルトで「ODataTFS.Web」がスタートアッププロジェクト(太字)になっていると思います)
「Web.config」を開き、<system.diagnostics>-<trace>-<listeners>にある「<add type="Microsoft.WindowsAzure.~」をコメントアウトします。



Set10_2

<appSettings>にある「add key="ODataTFS.TfsServer"」の後ろのvalueに接続先のサーバを指定します。(VS IDEでの接続先と同じ設定です)



Set11_2

ここで、web.configを一旦保存します。

ODataTFS.Webプロジェクトのプロパティを開き、「Web」タブにある「プロジェクトのURL」に対して、先ほど作成したIISサイトのポート番号を追加し、「仮想ディレクトリの作成」を押します。

Set12

「仮想ディレクトリは正しく作成されました。」とメッセージボックスが表示されればOKです。
その後、「配布パッケージの作成」を実行します。

この状態で、「http://localhost:9999/ODataTFS.Web/」にアクセスすると、トップページが表示されます。

Set16

下の方に、各種リソースにアクセスするためのパスが記載されていますが、「http://localhost」を「http://localhost:9999/ODataTFS.Web」に置き換えればアクセスできます。
さらに、「http://localhost:9999/ODataTFS.Web」の「localhost」をサーバ名に置き換えれば、クライアントからもアクセスできます。
ためしに、WorkItemsコレクションにアクセスしてみると、こんな感じで表示されます。

Set18

ということで、OData Services for TFSがローカルのTFSサーバで使えるようになりました。

ODataが使えると、別サーバからTFSのリソースが操作できるようになるので、Webアプリでプロジェクト運営に合わせたサイトを作成するとかも簡単にできるようになるのかなと。

個人的には、codeplexにある「TFS On The Road」のような、WindowsPhone7からODataを使ってTFSサーバにアクセスするアプリを作ってみたいですが、スキルの問題が^ ^;