很难“一键式”安装数据库和 GUI。但是您可以使用版本控制或时间戳记部署项目以将类似项目保持在一起。源代码控制这些项目能够回滚并按需提供您需要的版本。有一些方法可以将版本号或时间戳与 GUI 组件联系在一起,以将部署关联为一个单元。
例如,您可以对更改数据库脚本(FooTable v100、v101、v102)进行版本控制或为它们添加时间戳,然后将它们签入源代码控制。将各种关联存储在某种类型的配置数据库中。在我的工作中,我们使用 SharePoint 列表来逐项列出部署,并使用 SharePoint 列表项引用来同时引用特定更改的所有不同项。由于所有内容都受源控制,因此如果需要,我可以轻松找出并检索特定更改的部署项。
您可以使用使用受信任连接的连接字符串,例如
数据源=myServerAddress;初始目录=myDataBase;集成安全=SSPI;
所以你不需要为每个环境嵌入不同的用户名和密码。您可以将服务器和数据库名称存储在每个相应环境服务器上的 machine.config 或 web.config 中。
所以在开发上, ConnectionString 可能是
数据源=myDevServer;初始目录=myDevDataBase;集成安全=SSPI;
测试中:
数据源=myTestServer;初始目录=myTestDataBase;集成安全=SSPI;
如果将它们存储在服务器上的配置文件中,则无需在包中进行更改。
如果您确实需要将该配置与包一起存储,您应该使用技术根据您要部署到的环境动态更改设置。例如,您可以使用环境变量来确定您所在的环境,以便您知道要运行哪些代码来动态更改配置。或者代替代码,您可以使用 XSLT 来更改 XML 配置。您还可以在 MSI 中设置自定义操作以在安装/卸载时运行。您可以在此处添加代码以在部署时根据需要更改配置。
同样,数据库脚本本身可以根据您部署的环境而改变。您可以使用 SQLCMD 变量动态更改 SQL 代码(特别是在 3 和 4 部分命名引用中的数据库和服务器名称,即 devlinkserver.devdb.dbo.foo 如果替换 devlinkserver 和 devdb 可以更改为 testlnkserver.testdb.dbo.foo带有 SQLCML 变量)。根据您要部署到的环境,使用 SQLCMDs 脚本根据需要更改变量值:
IF @@SERVER = 'somedevdbserver'
SET :linkserver = 'DevDBServer'
IF @@SERVER = 'sometestserver'
SET :linkserver = 'testDBServer'
ETC...
总之,在所有环境中保持尽可能多的配置相同。使用上述各种技术根据需要为每个环境中需要不同的部分动态更改配置。