ビルド ドロップの場所に使用されているサーバーは廃止されます。現在のビルド定義を変更して新しいサーバーを使用する方法は知っていますが、既に完了したビルドの履歴レコードを変更するにはどうすればよいですか? 過去のビルドを開いて [ドロップ フォルダーを開く] をクリックすると、新しいサーバーに移動できるようになりたいです。古いビルドを新しいサーバーに手動でコピーします。
2 に答える
次のサンプルは機能しているように見えました。
using System;
using System.Collections.Generic;
using Microsoft.TeamFoundation.Build.Client;
using Microsoft.TeamFoundation.Client;
namespace ChangeDropLocation
{
class Program
{
static void Main()
{
TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://MyServer:8080/tfs/Collection"));
var buildService = (IBuildServer)teamProjectCollection.GetService(typeof(IBuildServer));
IBuildDetail buildDetail = buildService.GetBuild(new Uri("vstfs:///Build/Build/1506"));
buildDetail.DropLocation ="\\somewhere";
var buildDetails = new List<IBuildDetail>();
buildDetails.Add(buildDetail);
buildService.SaveBuilds(buildDetails.ToArray());
}
}
}
考慮すべきことの 1 つは、ビルド情報を更新する権限がおそらくないことです。私はプロジェクト管理者ですが、最初の試行で次の結果が得られました。
TF215106: アクセスが拒否されました。DOMAIN\username は、アクションを実行するために、チーム プロジェクト MyTeamProject のビルド定義 myBuildDefinition のビルド情報の更新アクセス許可を必要とします。詳細については、Team Foundation Server 管理者に問い合わせてください。
これを克服するには、TeamExplorer の [ビルド] で右クリックし、[セキュリティ...] を選択して権限を設定します。
これを行うためのツールを知りません。たぶんTFSのpowershellコマンドがありますが、それを除いて、適切な予防策を講じた後、SQL Dbを直接更新できると思います。
ドロップ場所へのマッピングは、tbl_Build のコレクション SQL Db に格納されます。
[tbl_Build] から [DropLocation]、[DropLocationRoot]、[LogLocation] を選択
ただし、倉庫に影響があるかどうかはわかりません。そこをまず確認してみるといいかもしれません。
Microsoft は一般的に、このようなものに対して SQL を直接操作しないことを推奨していると思います。代わりに、比較的安全なアプローチである TFS API を使用できます。