【问题标题】:Automating Red gate Source Control DB Linking and Commit to SVN自动化红门源代码控制数据库链接和提交到 SVN
【发布时间】:2016-07-20 23:47:06
【问题描述】:

我们有一个要求,我们希望将 Red Gate 源代码控制作为自动化界面的一部分。

我们希望以编程方式链接所需的数据库并提交对数据库的更改。

这可能吗?如果是,我们应该使用哪个 api?

【问题讨论】:

    标签: svn redgate


    【解决方案1】:

    我知道这个问题很老,但我正在做你所描述的事情。

    我有一项工作,每 X 分钟运行一次,并将数据库的当前状态放入版本控制中(对我们来说,这是反复无常的,但您可以使用 git 或其他方式实现完全相同的目标)。

    cd c:\data\SourceCodeDirectory
    hg pull
    hg update
    if not exist "c:\data\SourceCodeDirectory\databaseName" mkdir "c:\data\SourceCodeDirectory\databaseName"
    cd "c:\Program Files (x86)\Red Gate\SQL Compare 11"
    sqlcompare /s1:DBServer /db1:databaseName /scr2:"c:\data\SourceCodeDirectory\databaseName" /synchronize
    
    cd c:\data\SourceCodeDirectory\databaseName
    hg add
    hg commit -m "Database Changes" -u DatabaseSchemaUser
    hg push
    

    一旦此作业运行,对数据库所做的任何更改都将在版本控制中。

    【讨论】:

      【解决方案2】:

      这是一个艰难的过程。根据您的自动化方式,您可以使用其他程序的组合。例如,如果您有某种 CI 系统,您可以使用 SQL Compare 自动将源代码控制中的文件与实时数据库进行比较,并告诉它进行同步。您需要源代码控制系统的命令行界面来检查更改。

      SQL 源代码控制作为一种软件,旨在仅以交互方式工作。

      如果您想在代码(c#、VB)中执行此操作,那么您可以利用源代码控制系统的 API 来签入文件(如果有的话)。例如,SVN 有“SharpSVN”,还有一个用于 TFS 的 API。

      【讨论】:

      • 谢谢。我们将对此进行调查,如果我仍有疑问,我会提出。
      【解决方案3】:

      也许这应该是一条评论,但我需要那里没有的格式和空间。

      像这样的“自动提交”通常是有风险的,因为它们有破坏原子性和丢失信息的风险。考虑以下场景:

      1. 两名开发人员正在对数据库进行独立更改。他们都同时更改了各自的表,并且这种自动化将其拾取并将表更改作为一个单元提交。您如何区分这两个活动?
      2. 发生上述情况时,谁的名字会出现在存储库更改日志中?
      3. 开发人员正在进行一项涉及对多个表和存储过程进行更改的广泛更改。这种自动化独立地提交每一个。您如何将这些“捆绑”起来以进行日志记录和审核、审查所做的更改等?
      4. 在我的环境中,提交到代码存储库的每个更改都需要在提交消息中记录一个更改 ID。这将如何在这里工作?

      我的建议是更改要求。出现意外(坏)后果的方式太多了。

      【讨论】:

      • 我同意你的观点,但问题是,我们正在测试和生产环境中自动化它。在测试和生产环境中发生这些错误的可能性要小得多。还要回答场景#4,如果我们自动化流程,那么更改 ID 将与应用程序有关,如果其他人尝试输入更改,它将显示他们的名称,我们可以找出是否有任何形式的篡改.
      • 在那些环境中甚至不需要这样做,因为如果不首先停止源代码控制和开发服务器,就不应该对它们进行任何更改。您是否限制了对测试和生产的访问(职责分离),以及促进从开发到测试再到生产的变化的明确流程?如果没有,这将无助于解决这个问题,并且可能会使事情变得更加混乱。如果是这样,则不需要这样做。
      【解决方案4】:

      您是否将此作为自动化构建过程的一部分?如果是这样,了解您使用的构建工具和源代码控制工具会很有帮助。

      这应该提供一些有用的资源:

      http://www.red-gate.com/products/sql-development/sql-automation-pack/

      有 NAnt 和 MSBuild 脚本可以为您的 SQL Server 数据库执行有用的构建/测试任务。如果你想做一些更自定义的事情,你可以结合使用你的版本控制系统命令行和 SQL 比较命令行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-10
        • 2021-11-09
        • 1970-01-01
        • 2015-06-04
        • 2014-08-06
        • 2021-01-29
        • 2013-05-02
        • 2012-11-07
        相关资源
        最近更新 更多