我们如何使用其他用户凭据执行Jenkins作业

我们如何使用其他用户凭据执行Jenkins作业,jenkins,hudson,Jenkins,Hudson,我需要使用登录的用户凭证通过Jenkins UI执行一些Jenkins作业,例如“发布到生产”。原因是,我们有单独的支持团队成员,他们有权访问生产框,而不是开发团队成员。因此,为了将任何代码库部署到生产环境中,所有Windows部署命令(例如,创建、更新文件、文件夹等)都需要使用具有生产环境访问权限的特定用户凭据来运行。因此,即使是无法访问生产箱但是Jenkins管理员的开发团队成员,执行相同的作业也会由于“访问被拒绝”而导致失败。只有在支持团队成员使用其凭据运行作业时,作业才会成功 我尝试使用

我需要使用登录的用户凭证通过Jenkins UI执行一些Jenkins作业,例如“发布到生产”。原因是,我们有单独的支持团队成员,他们有权访问生产框,而不是开发团队成员。因此,为了将任何代码库部署到生产环境中,所有Windows部署命令(例如,创建、更新文件、文件夹等)都需要使用具有生产环境访问权限的特定用户凭据来运行。因此,即使是无法访问生产箱但是Jenkins管理员的开发团队成员,执行相同的作业也会由于“访问被拒绝”而导致失败。只有在支持团队成员使用其凭据运行作业时,作业才会成功

我尝试使用参数化插件,但无法将密码成功传递到包含MSDeploy说明的批处理文件。甚至Jenkins控制台日志也会显示在其控制台输出中传递的参数,这是一个安全问题

我检查了基于角色的安全插件,但这对我帮助不大。我只需要一个插件,它应该要求用户在开始构建作业之前提供他们的凭据,并且应该使用用户凭据来执行作业,这样当支持团队成员使用他们的凭据构建作业时,我的MSDeploy命令将能够在生产框上部署代码。我希望有人支持模仿

现在,所有Jenkins作业都是使用服务帐户执行的,Tomcat服务被配置为运行Jenkins所在的服务帐户


如果有任何帮助,我们将不胜感激。

为了防止出现任何混乱,Jenkins作业将始终作为同一操作系统用户运行。基于矩阵的安全性适用于登录Jenkins服务器并控制创建或启动作业等功能的用户

您可以将作业配置为使用一组通用生产凭据,然后阻止开发人员调用作业

也许更好的方法是将构建代码的流程与部署代码的流程分开。下图(取自该项目)演示了如何将我最喜欢的一些工具与集成在一起

最后,我强烈建议您阅读以下链接:


您可以使用内置的windows runas或Powershell InvokeCommand cmdlet和-Credential来运行-这两种方法都将以纯文本形式存储用户名/密码-因此请务必考虑风险,但这为您提供了灵活性

我很惊讶,在另一台机器上设置一个代理作为另一个服务运行,并将代理定义为一种特殊的“类型”来接收作业,这并没有一个更好的答案——我所期望的就是这样的东西,但我在Jenkins中没有见过这样的实现(我是詹金斯的新手,所以我一直在寻找答案,发现了这条线索)


对于更熟悉Jenkins的人来说,可以考虑的另一个问题是,当您将自定义路径设置为MSBuild时,是否可以将其设置为runas/user:…MSBuild.exe?我目前没有额外的Jenkins服务器来尝试该操作。

嗨,我知道我在这个线程上会迟到,但我刚刚遇到了这个问题,很难解决所以我想我可以和大家分享一下我的设置

第一件事:如果你想以“特定用户”的身份运行Jenkins作业(具备所有正确的能力),最简单的方法是以该用户的身份运行Jenkins从机

然后,您可能会遇到以下问题:您可能希望在与windowsservices相同的windows计算机上运行多个从属服务器。这很好,只要每个从属服务器都有自己的
远程根目录
,并且可能也有一个特定的“标签”

一旦您成功地将从属服务器作为windows服务运行,请启动服务控制台(run services.msc)。编辑新创建的服务属性,转到“登录”选项卡。选择“登录身份:此帐户”并输入您的帐户凭据


干杯:)

谢谢您的回复。“您可以将作业配置为使用一组通用生产凭据,然后阻止开发人员调用该作业。”不确定我们如何才能做到这一点,因为开发团队在Jenkins web服务器和Jenkins web应用程序上都是管理员。我的场景是我想要一个作业“发布到生产”,它在生产Web服务器上执行MSDeploy命令。但这里的问题是,hudson作业使用服务凭证帐户执行,Tomcat服务在部署hudson的帐户上运行。此服务帐户没有访问prod web server的权限。@user1233802如果您的开发人员是Jenkins上的管理员,则无法实际限制他们的访问权限。。。。为部署而设置詹金斯的第二个实例是选项,但在那个阶段,为什么不考虑使用RunDead来分离构建和部署的责任呢?开发人员可以限制对Rundeck的访问,使他们能够部署到开发人员和测试系统上,但不能访问生产Rundeck projects.hmmm,这可能是一个选项。但理想情况下,我希望在另一个用户的上下文中执行作业,而不是在Tomcat使用Jenkins托管的用户帐户的上下文中执行作业。我将尝试rundeck,但是否可以在其他用户的凭据下执行rundeck作业(我感兴趣的是模拟),或者rundeck也使用Tomcat正在使用的用户帐户?请帮助,您正在windows上运行,对吗?安装SSH服务器,您可以将其设置为在本地主机上以不同的用户id运行作业。这就是rundeck的配置方式,您可以使用Jenkins执行相同的操作。请参阅SSH插件。我无法对上面Steve Radich Bitshop的答案进行评论,因此创建了一个单独的答案。史蒂夫的回答让我大吃一惊,所以我想成为未来的读者