我的团队使用TeamCity进行持续集成。它将通过网络部署构建、测试和部署web应用程序到dev和qa web服务器。棘手的部分是部署到生产web服务器-我们的策略规定,开发人员不能部署到生产,只有系统管理员可以。
我们目前的方法是让TeamCity构建一个web部署包,管理员可以下载并安装在生产web服务器上。但是,我们希望允许它们只需单击构建配置上的"Run“,但我们不确定如何保护该按钮。
我们可以创建一个只有管理员才能访问的TeamCity项目,但我们也必须解决网络部署安全性问题。Web部署服务需要使用生产服务器上的本地管理帐户进行身份验证。我们不希望开发人员访问构建脚本中的用户名/密码,也不希望每个构建代理都像这个帐户一样运行,因为开发人员可以创建一个使用它部署到生产中的构建。
在TeamCity安全/部署最佳实践方面,我还没有找到足够的资源,但我无法想象我们是这种情况下的唯一公司。其他人如何管理自动化部署安全?
发布于 2011-10-20 00:48:14
使用Teamcity中的角色和权限,您可以拥有一个只有部署团队才能访问的项目。它可以在主构建上有一个工件相依,您甚至可以让它使用“最后一个固定的构建”,这样开发人员就可以控制什么是可用的。
我将安装一个能够部署到目标系统(S)的构建代理,然后在“兼容构建” UI中使用该代理的TeamCity特性,使其只与生产部署构建兼容。(当然,您还需要确保开发人员没有修改代理配置的权限。)
这是Teamcity使用代理兼容配置选项的一个缺点:如果您将另一个构建代理(S)与所有构建保持兼容,那么如果免费的话,可以尝试从其中之一进行生产部署。我所知道的唯一解决办法是将它们全部设置为只运行“指定构建”,并将所有其他构建添加到其他代理(S)中。痛苦的是,如果您添加了一个新的构建,它将无法运行在任何地方,除非您特别添加它作为兼容。
还有几种方法可以将构建限制为仅在特定代理上运行,使用构建配置中的代理需求。
一种是添加一个要求teamcity.agent.name等于要运行它的代理名称的要求。(或者相反,不等于您不希望它运行的那个)。
另一种方法是添加对环境变量(存在或具有特定值)的要求,然后只在您希望能够运行该构建的代理(S)上设置该环境变量。
另一个可能的解决方案是安装两个Teamcity,因为您实际上有两组不同的用户。您显然不能使用工件依赖项,但是可以使用url (如:* http://teamcity.server/repository/download/bt41/latest.lastSuccessful/setupfile.exe )获取给定构建的最新构件。
其中:
bt41是Teamcity中的构建id (当您导航到任何构建时,您可以在URL中找到它)latest.lastSuccessful也可以是lastest.lastPinned、`latest.lastFinished或确切的生成号。setupfile.exe是您希望从工件输出中获取的文件(如果不是在顶层发布的话,这也可以是一个路径)。发布于 2012-05-26 11:44:55
为了保护web部署过程的安全,如果您位于域中,则可以设置web部署以接受windows身份验证,然后以具有在IIS中部署权限的域用户的身份运行工作组城市构建代理。我有这样的设置,你不需要任何类型的密码在网络部署脚本。
为web部署设置windows身份验证:http://blogs.iis.net/carlosag/archive/2011/12/13/using-windows-authentication-with-web-deploy-and-wmsvc.aspx
https://serverfault.com/questions/323047
复制相似问题