代码之家  ›  专栏  ›  技术社区  ›  mjallday

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

  •  7
  • mjallday  · 技术社区  · 16 年前

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

    1) 如何确保变更集与特定生成关联?

    2 回复  |  直到 16 年前
        1
  •  9
  •   mjallday    16 年前

    谢谢斯科特,

    过了一会儿,我找到了一个很好的方法来处理这个问题。

    基本上,我创建了一个任务,该任务获取与构建相关联的当前变更集(我问题的第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)
        );
    
    }
    

    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;
    

        2
  •  0
  •   Scott Weinstein    16 年前

    因此,我可以理解这种方法的直观吸引力,但我认为这不是正确的方法。

    对于第一个问题,我不确定这意味着什么。对于第二个问题,您可以使用build标签和tf history today更改文件列表。

    CTP 在管理数据库更改方面有很多新功能。我也听说 Red Gate 还有很好的数据库管理工具。

    推荐文章