当前位置:  开发笔记 > 数据库 > 正文

以编程方式查找自上次良好构建以来的TFS更改

如何解决《以编程方式查找自上次良好构建以来的TFS更改》经验,为你挑选了1个好方法。

我在TFS中有几个分支(开发,测试,阶段),当我将更改合并到测试分支时,我希望自动构建和部署脚本找到所有更新的SQL文件并将它们部署到测试数据库.

我以为我可以通过查找自上一次良好构建以来与构建相关联的所有变更集,查找变更集中的所有sql文件并部署它们来实现此目的.但是我似乎没有因为某种原因而将变更集与构建相关联,所以我的问题是双重的:

1)如何确保变更集与特定构建相关联?

2)如何获得自上一次良好构建以来分支中已更改的文件列表?我有最后一个成功构建的构建但我不确定如何在不检查更改集的情况下获取文件(如上所述,它与构建无关!)



1> mjallday..:

谢谢斯科特,

过了一会儿,我找到了一个很好的方法来管理它.

基本上我创建了一个任务,它获取与构建相关的当前变更集(我的问题的第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 sqlFilePaths = new List();
foreach (Change change in changeSet.Changes)
{

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

    }
}
return sqlFilePathes;

但如果有人想要我很乐意给他们完整的代码.确保存储过程在整个系统中保持同步.这只会让架构更改在我的数据库中手动管理,我很乐意这样做.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有