7

TFS にいくつかのブランチ (開発、テスト、ステージ) があり、変更をテスト ブランチにマージするときに、自動化されたビルドおよびデプロイ スクリプトを使用して、更新されたすべての SQL ファイルを検索し、それらをテスト データベースにデプロイします。

前回の適切なビルド以降にビルドに関連付けられたすべての変更セットを見つけ、変更セット内のすべての sql ファイルを見つけて展開することで、これを行うことができると思いました。ただし、何らかの理由で変更セットがビルドに関連付けられていないように見えるため、質問は2つあります。

1) 変更セットが特定のビルドに関連付けられていることを確認するにはどうすればよいですか?

2) 前回の正常なビルド以降にブランチで変更されたファイルのリストを取得するにはどうすればよいですか? 私は最後に正常にビルドされたビルドを持っていますが、変更セットをチェックせずにファイルを取得する方法がわかりません (上記のようにビルドに関連付けられていません!)

4

2 に答える 2

9

ありがとうスコット、

しばらくして、これを管理する良い方法を見つけました。

基本的に、ビルドに関連付けられている現在の変更セットを取得するタスクを作成し (私の質問のポイント 1 は問題ではありません)、それらをループして .sql ファイルを探します。それらのリストを取得したら、変更スクリプトを作成したり、ターゲット データベースに対してそれらを実行したりできます。

コードは次のようになります。

TeamFoundationServer tfs = new TeamFoundationServer(TfsServerUrl);
VersionControlServer vcs = (VersionControlServer)tfs.GetService(typeof(VersionControlServer));

var buildServer = (IBuildServer)tfs.GetService(typeof(IBuildServer));


IBuildDetail build = buildServer.GetBuild(
    new Uri(BuildUri)
    , null
    , QueryOptions.All
);

build.RefreshAllDetails();

var changesets = InformationNodeConverters.GetAssociatedChangesets(build);

foreach (var changesetSummary in changesets)
{
    Changeset changeSet = vcs.GetChangeset(changesetSummary.ChangesetId);

    sqlFilePaths.AddRange(
        ProcessChangeSet(changeSet)
    );

}

ProcessChangeSet 内のコードは次のようになります

List<string> sqlFilePaths = new List<string>();
foreach (Change change in changeSet.Changes)
{

    if ((change.Item.ItemType == ItemType.File)
        && (change.Item.ServerItem.EndsWith(".sql", StringComparison.OrdinalIgnoreCase))
        )
    {
        sqlFilePaths.Add(
            sqlPath
        );

    }
}
return sqlFilePathes;

しかし、誰かが望むなら、喜んで完全なコードを提供します。ストアド プロシージャがシステム全体で同期されていることを確認します。これにより、データベース内で手動で管理するスキーマの変更のみが残ります。これは喜んで行います。

于 2008-10-31T09:02:32.270 に答える
0

したがって、このアプローチの直感的な魅力は理解できますが、正しい方法ではないと思います。

一つには、それは難しいでしょう。しかし、2 つ目の問題は、TFS には展開データを記録する適切な方法がないことです。

最初の質問については、それが何を意味するのかわかりません。2 番目の質問では、変更されたファイルのビルド ラベルと tf 履歴の今日のリストを使用できます。

別の方法として、SQL の変更を管理する方法を再検討することもできます。現在保留中の変更を 1 つのディレクトリに保持し、デプロイ後にファイルを別のディレクトリに移動するローテクな方法を使用しています。この方法は、デプロイメント履歴テーブルをデータベースに保持することで拡張できます。また、vsts DB の追加も調べてください。現在のCTPには、データベースの変更を管理するための多くの新機能があります。また、 Red Gateには優れたデータベース管理ツールもあると聞いています。

于 2008-10-23T13:18:51.530 に答える