【问题标题】:Managing passwords in continuous deployment在持续部署中管理密码
【发布时间】:2012-03-17 06:16:33
【问题描述】:

我们正在使用 TeamCity 部署持续集成环境。当我们完成 CI 流程并转向持续部署时,我们遇到了如何管理生产密码的问题。对于配置中的其他更改,我们使用 Web.Config 转换。但是,我真的不想在构建配置文件中烘焙生产密码。

在 CI/CD 之前,我们将获取 Web.config,使用 aspnet_regiis 解密连接字符串,更改密码,然后重新加密。显然,这很容易出错,而且完全不符合 CI/CD 的精神。

我还有其他几个想法,基本上都是关于在部署脚本中使用某些东西来重写然后加密文件的连接字符串部分,但这似乎是一个常见问题,并且必须是一些普遍接受的解决方案。但到目前为止,我找不到它。有没有“正道”?

谢谢!

【问题讨论】:

标签: c# asp.net-mvc continuous-integration teamcity


【解决方案1】:

自 TeamCity 7.0 起可用的一种可能解决方案是使用 typed parameters。您可以在 TeamCity 中定义密码类型的参数,并以某种方式将其传递给您的构建脚本(作为环境变量或作为您的构建脚本属性)。

TeamCity 将此类参数的值存储在其自己的配置文件中,并以加扰的形式存储在数据库中。如果密码出现在构建日志或构建参数页面上,它将被替换为 ***。

【讨论】:

  • 请注意,原始密码可能会出现在日志中,甚至 TeamCity 网站也会说:“将参数设置为输入密码并不能保证无法检索原始值。”我遇到的情况:当您的 git push 失败时,它会打印“请求的 URL 返回错误:访问 时出现 400 Bad Request”这一行。因此,如果您使用带有用户/密码信息的 git url,即使您以适当的方式输入,这里的密码也不会被替换为 ****
【解决方案2】:

使用配置转换。您甚至可以构建自己的转换来处理加密/解密。最简单的方法是加密 release.web.config 中的生产字符串并使用转换来处理替换连接字符串。

http://msdn.microsoft.com/en-us/library/dd465318.aspx

http://sedodream.com/2010/09/09/ExtendingXMLWebconfigConfigTransformation.aspx

如果这对您不起作用,请使用构建后事件调用 aspnet_regiis。如果你选择扩展配置转换,你可以用它做任何事情。只要你能拿到加密密钥,它们就可以在月球上。

【讨论】:

  • 这不是那么容易,你会在哪里存储加密密钥?
  • 构建后事件怎么样?我不知道你是否可以在 TeamCity 中做到这一点,但 Jenkins 支持它。
【解决方案3】:

你不能在 iis 中定义连接字符串吗?他们变化很大吗?我想我只是在 IIS 中为网站设置它们,然后不将它们部署为应用程序的一部分,或者至少优先考虑我的 IIS 设置。

【讨论】:

  • 我认为 IIS 工具只是提供了一个很好的前端来编辑应用程序的 web.config 文件,尽管我现在找不到证实这一点的文档。
  • 如果您正在进行持续交付/部署,那么构建服务器也应该负责 IIS 的配置。这不应该是手动步骤。
猜你喜欢
  • 1970-01-01
  • 2020-09-20
  • 2016-08-31
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多