我使用Git存储库对我的应用程序进行版本控制。我的项目结构是这样的,我使用本地化到运行应用程序的每个环境的配置文件。这些本地配置文件包含诸如SQL连接字符串之类的内容以及与每个环境相关的其他信息(每个环境都有它自己的SQL Server数据库,包括Teamcity中的测试环境)。这些文件不是存储库的一部分,但是在创建新环境时会新创建。在这个范例中,TeamCity是另一个环境,我为TeamCity创建了一个配置文件,用于为我的应用程序构建和运行NUnit测试。
我的问题是:如何将不受源代码管理的文件复制到TeamCity检出存储库的文件夹中?在TeamCity开始构建应用程序之前,我该如何做?我确信这是可行的,因为我已经阅读here"应使用代理端结帐在每台计算机上配置计算机专用设置(如配置SSL通信等) "我该怎么做呢?我无法从文档中找到直截了当的答案。
我读到this thread提到了使用多个根的可能性,这意味着它将从公共存储库和私有源中提取公共资源,并限制访问,并且只能访问TeamCity的。这是一个不错的解决方案,我可以看到,这比每次运行构建时批处理文件或复制私有/本地文件更容易维护,但出于某种原因,我觉得放置密码并不舒服在存储库中。我不确定为什么我会有这种偏见(看起来它似乎很脆弱)所以如果有人对这两种解决方案有任何经验,我很乐意听到它们。我还想听听有关在密码保护的存储库下存储敏感信息的意见。这是安全的做法吗?
感谢任何可以提供帮助的人。
PS:我已经查看了Edit VCS Root页面和服务器上的"自定义克隆目录"设置,但我仍然不知道如何将文件复制到该目录。 TeamCity的工作目录是否更改或保持不变?
答案 0 :(得分:4)
我不想将密码放在版本控制中,尤其不是像Github那样的外部托管版本控制。
我只是将配置文件放在TeamCity之外的构建计算机上的某个位置,并在构建中放置一个命令行步骤,在需要之前将它们复制到位。通常,
您无需担心TeamCity工作目录的位置,因为命令行步骤的当前目录将是您的构建目录,您可以使用相对路径作为目标。
我不会尝试给出具体的例子,因为我使用的堆栈与你不同,但我认为同样的原则应该有效。
答案 1 :(得分:2)
在检查了具有敏感信息的面向公众的可私有访问的存储库的安全性方面之后,我最终选择了第二个私有存储库来存储配置文件。描述了这种技术here。
但是,该链接不能解决使用多个VCS根目录的主要问题 - 除非修改结帐规则,否则Teamcity会将第一个VCS文件复制到结帐目录,删除所有文件,然后将第二个VCS文件复制到同一目录。我不知道为什么选择此行为作为默认行为。这显然无法构建,因为原始代码文件不再存在。
解决方案描述为here。基本上我必须设置结帐规则以将从第一个VCS根目录复制的文件移动到子文件夹,然后在第二个VCS根目录上具有结帐规则,以将配置文件移动到该子文件夹中的正确位置。
现在讨论核心问题:将敏感信息存储在面向公众的私人可访问存储库中的安全隐患。这里重要的形容词是面向公众的。我在这种情况下对安全性的基本要求是,存储库应具有与使用“安全”选项卡保护的Windows文件夹一样多的安全性。我用来证明它作为私有Git存储库更加安全的论据是使用HTTP或SSH安全性,人们可能认为它与Windows文件夹安全性一样强,如果不强,因为它们比Windows文件夹。由于这只是存储测试环境的登录信息,所以我并不担心。我的生产环境的所有敏感信息都将手动处理。但我对这个话题持开放态度。希望这个解决方案有助于其他人请随时发表评论/提问。