4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure DevOpsAdvent Calendar 2018

Day 7

Team Foundation Server 2017 ビルド

Last updated at Posted at 2018-12-10

オンプレミスの Team Foundation Server (TFS) 2017 を利用しています。タスク管理とソース管理として使っているのですが、この度、ビルドに挑戦してみました。結果、ビルドが壊れたらすぐ分かるようになったので、良かったと思います。

プロダクトのアーキテクチャは C++/MFC です。プロダクトによって事情は様々かと思いますが、参考になれば幸いです。以下、TFS のバージョンによる差異があるかもしれませんが、ご了承ください。

1. エージェント プールの追加

  1. TFS で コレクション設定 > エージェント プール を開く。
  2. 新しいプール をクリックする。
  3. 名前 を入力する。
  4. OK をクリックする。

2. エージェントのセットアップ

  1. ビルド用のマシンにログインする。
  2. TFS で プロジェクト設定 > エージェント キュー を開く。
  3. エージェントのダウンロード ボタンをクリックする。
  4. ダウンロードした ZIP ファイルを C:\agent 等に展開する。
  5. Windows PowerShell または cmd.exe を実行する。
  6. .\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. エージェントの実行

  1. Windows PowerShell を 管理者として実行する
  2. .\run.cmd を実行する。

これで、 エージェントの一覧で 状態オンライン になります。

どうしてわざわざ管理者として実行しているのかというと、ビルド生成物の中に COM があり、ビルド後のイベント で登録しているからです。管理者権限で実行した PowerShell から run.cmd を実行すれば、 COM の登録ができます。

(追記) エージェントをサービスとして実行する場合

サービスを管理者権限で実行するには、ログオンに ローカル システム アカウント を指定すればよいでしょう。

4. ビルド定義の追加

  1. TFS プロジェクトで ビルドとリリース > ビルド を開く。
  2. 新規 ボタンをクリックする。
  3. テンプレートの選択.NET デスクトップ を選択して 適用 ボタンをクリックする。
  4. 適宜設定を編集する。(後述)
  5. 保存 ボタンをクリックする。

これで、一覧に新しいビルド定義が現れます。

5. ビルド定義の設定のポイント

タスク タブ

  • ソリューション : .sln を指定することも .vcxproj を指定することもできますし、ワイルドカードを使うこともできます。.sln 間に依存関係がある場合は、粒度と順序を工夫してタスクを追加します。
  • Visual Studio のバージョン : 私のところでは Visual Studio 2015 を指定しています。
  • プラットフォーム : $(BuildPlatform) となっていて、 変数 タブ内でこの値を win32 と設定してあります。ここが空白の場合、規定の(おそらく .sln で最初に出現する)プラットフォームがビルドされます。
  • 構成 : $(BuildConfiguration) となっていて、 変数 タブ内でこの値を release と設定してあります。ここが空白ですと、 debug を指定したことになってしまいます。

タスクの右クリックから 有効 / 無効 を簡単に切り替えられるのが、設定の調整のときには便利です。不要なタスクは、削除してもよいですが、 無効 にしておくのでもよいでしょう。

トリガー タブ

  • 継続的インテグレーション : ここを 有効 にすると、ソースがチェックインされる度にビルドします。ビルド時間が長くチェックインが多い場合は、これは難しいですね。
  • スケジュール済み : ここを 有効 にするといわゆるデイリー ビルドを仕掛けることができます。私のところでは、今はこちらを有効にしています。

オプション タブ

  • エージェント > 規定のエージェント キュー : 追加した <プール名> を設定します。
  • エージェント > ビルド ジョブのタイムアウト(分) : これを超えるとビルドがキャンセルされます。ログには「エージェント <エージェント名> で実行されているジョブが、最大実行時間 hh:mm:ss を超えました。」と書かれます。初期値は 60 分ですが、必要に応じて伸ばしてください。
  • 複数構成 : ここを 有効 にすると、 Debug 構成と Release 構成を両方ビルドするような設定が作れます。「ビルド」階層と「プロセス - タスク」階層の間に「構成」階層ができる感じです。

設定は試行錯誤しながら調整していけば良いと思います。


4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?