【发布时间】:2013-06-20 05:08:14
【问题描述】:
我需要使用登录的用户凭据通过 Jenkins UI 执行一些 Jenkins 作业,例如“发布到生产”。原因是,我们有单独的支持团队成员,他们可以访问生产盒,而不是开发团队成员。因此,为了将任何代码库部署到生产环境,所有 Windows 部署命令(例如,创建、更新文件、文件夹等)都需要使用有权访问 Production Box 的特定用户凭据运行。因此,即使是无法访问生产框但是 Jenkins 管理员的开发团队成员,执行相同的作业也会因“拒绝访问”而导致失败。仅当支持团队成员使用其凭据运行该作业时,该作业才应该成功。
我尝试使用参数化插件,但无法成功将密码传递给包含 MSDeploy 指令的批处理文件。甚至 Jenkins 控制台日志也会显示在其控制台输出中传递的参数,这是一个安全问题。
我检查了基于角色的安全插件,但这对我没有多大帮助。我只需要一个插件,它应该要求用户在开始构建作业之前提供他们的凭据,并且应该使用用户凭据来执行作业,这样我的 MSDeploy 命令将能够在生产盒上部署代码,当支持团队成员使用他们的凭证构建该作业。我希望有人支持冒充。
现在,所有 Jenkins 作业都使用托管 Jenkins 的 Tomcat 服务配置运行的服务帐户执行。
任何帮助将不胜感激。
【问题讨论】:
-
我无法评论上述 Steve Radich-Bitshop 的答案,因此创建了一个单独的答案。史蒂夫的回答让我如痴如醉,所以我想让未来的读者意识到这一点。 Windows RUNAS 不允许在其命令行上输入密码,也不允许通过管道输入密码。这在其他答案中有所说明,例如来自 stackoverflow :stackoverflow.com/a/16116329/5047366 PowerShell 确实允许在命令行上使用凭据,从而使其成为可能。现在的 Jenkins 包含一个 PowerShell 插件和一个用于秘密字符串的插件,这使其成为一种可能的前进方式。