オンプレミスの Team Foundation Server (TFS) 2017 を利用しています。タスク管理とソース管理として使っているのですが、この度、ビルドに挑戦してみました。結果、ビルドが壊れたらすぐ分かるようになったので、良かったと思います。
プロダクトのアーキテクチャは C++/MFC です。プロダクトによって事情は様々かと思いますが、参考になれば幸いです。以下、TFS のバージョンによる差異があるかもしれませんが、ご了承ください。
1. エージェント プールの追加
- TFS で コレクション設定 > エージェント プール を開く。
- 新しいプール をクリックする。
- 名前 を入力する。
- OK をクリックする。
2. エージェントのセットアップ
- ビルド用のマシンにログインする。
- TFS で プロジェクト設定 > エージェント キュー を開く。
- エージェントのダウンロード ボタンをクリックする。
- ダウンロードした ZIP ファイルを C:\agent 等に展開する。
- Windows PowerShell または cmd.exe を実行する。
-
.\config.cmd
を実行する。
(追記) ※エージェントをサービスに登録する場合は、管理者として実行する必要があります。
サーバー URL を入力する > http://<サーバー名>:8080/tfs/
認証の種類 を入力する (Integrated の場合は、Enter キーを押します) > <Enter>
エージェント プール を入力する (default の場合は、Enter キーを押します) > <プール名>
エージェント名 を入力する (<クライアント名> の場合は、Enter キーを押します) > <Enter>
作業フォルダー を入力する (_work の場合は、Enter キーを押します) > D:\_work
エージェントをサービスとして実行しますか? (はい/いいえ) を入力する (N の場合は、Enter キーを押します) > <Enter>
これで、 エージェントの一覧に <クライアント名> が現れます。
(追記) エージェントをサービスとして実行する場合
続けて、サービスを実行するユーザー アカウントの入力を求められます。
エージェントをサービスとして実行しますか? (はい/いいえ) を入力する (N の場合は、Enter キーを押します) > y
サービスに使用するユーザー アカウント を入力する (NT AUTHORITY\NETWORK SERVICE の場合は、Enter キーを押します) > <Enter>
アカウントは services.msc (管理ツール > サービス) で後から変更できます。サービスは VSTS Agent (<サーバー名>.<クライアント名>) という表示名で登録されるようです。
3. エージェントの実行
- Windows PowerShell を 管理者として実行する。
-
.\run.cmd
を実行する。
これで、 エージェントの一覧で 状態 が オンライン になります。
どうしてわざわざ管理者として実行しているのかというと、ビルド生成物の中に COM があり、ビルド後のイベント で登録しているからです。管理者権限で実行した PowerShell から run.cmd を実行すれば、 COM の登録ができます。
(追記) エージェントをサービスとして実行する場合
サービスを管理者権限で実行するには、ログオンに ローカル システム アカウント を指定すればよいでしょう。
4. ビルド定義の追加
- TFS プロジェクトで ビルドとリリース > ビルド を開く。
- 新規 ボタンをクリックする。
- テンプレートの選択 で .NET デスクトップ を選択して 適用 ボタンをクリックする。
- 適宜設定を編集する。(後述)
- 保存 ボタンをクリックする。
これで、一覧に新しいビルド定義が現れます。
5. ビルド定義の設定のポイント
タスク タブ
- ソリューション : .sln を指定することも .vcxproj を指定することもできますし、ワイルドカードを使うこともできます。.sln 間に依存関係がある場合は、粒度と順序を工夫してタスクを追加します。
- Visual Studio のバージョン : 私のところでは Visual Studio 2015 を指定しています。
-
プラットフォーム :
$(BuildPlatform)
となっていて、 変数 タブ内でこの値をwin32
と設定してあります。ここが空白の場合、規定の(おそらく .sln で最初に出現する)プラットフォームがビルドされます。 -
構成 :
$(BuildConfiguration)
となっていて、 変数 タブ内でこの値をrelease
と設定してあります。ここが空白ですと、debug
を指定したことになってしまいます。
タスクの右クリックから 有効 / 無効 を簡単に切り替えられるのが、設定の調整のときには便利です。不要なタスクは、削除してもよいですが、 無効 にしておくのでもよいでしょう。
トリガー タブ
- 継続的インテグレーション : ここを 有効 にすると、ソースがチェックインされる度にビルドします。ビルド時間が長くチェックインが多い場合は、これは難しいですね。
- スケジュール済み : ここを 有効 にするといわゆるデイリー ビルドを仕掛けることができます。私のところでは、今はこちらを有効にしています。
オプション タブ
- エージェント > 規定のエージェント キュー : 追加した <プール名> を設定します。
-
エージェント > ビルド ジョブのタイムアウト(分) : これを超えるとビルドがキャンセルされます。ログには「エージェント <エージェント名> で実行されているジョブが、最大実行時間
hh:mm:ss
を超えました。」と書かれます。初期値は 60 分ですが、必要に応じて伸ばしてください。 - 複数構成 : ここを 有効 にすると、 Debug 構成と Release 構成を両方ビルドするような設定が作れます。「ビルド」階層と「プロセス - タスク」階層の間に「構成」階層ができる感じです。
設定は試行錯誤しながら調整していけば良いと思います。