我需要使用登录的用户凭据通过Jenkins UI执行一些Jenkins工作,例如“Release to Production”。原因是,我们有独立的支持团队成员,他们可以访问生产框而不是开发团队成员。因此,为了将任何代码库部署到生产环境,所有Windows部署命令(例如,创建,更新文件,文件夹等)都需要使用可以访问Production Box的特定用户凭据运行。因此,即使是没有访问Production框但是Jenkins Admin的Dev团队成员,执行相同的工作也会因“Access Denied”而导致失败。只有当支持团队成员使用其凭证运行时,该工作才能成功。
我尝试使用参数化插件但无法将密码成功传递到包含MSDeploy指令的批处理文件。甚至Jenkins控制台日志也会显示在其控制台输出中传递的参数,这是一个安全问题。
我检查了基于角色的安全插件,但这对我没什么帮助。我只需要一个插件,它应该要求用户在开始构建作业之前提供他们的凭证,并且应该使用用户凭证来执行作业,这样我的MSDeploy命令就能够在生产框上部署代码,当支持时团队成员使用他们的凭证构建该Job。我希望有人支持冒充。
现在所有的Jenkins Jobs都使用Tomcat服务配置为托管Jenkins的服务帐户执行。
任何帮助都将不胜感激。
答案 0 :(得分:6)
如果有任何混淆,Jenkins作业将始终作为相同的OS用户运行。基于Matrix的安全性适用于登录Jenkins服务器并控制创建或启动作业等功能的用户。
您可以将作业配置为使用一组通用生产凭据,然后阻止开发人员调用该作业。
也许更好的方法是将构建代码的进程与部署代码的进程分开。下图(摘自xebia-france项目)演示了我最喜欢的一些工具Rundeck和Nexus如何与Jenkins集成。
最后,我强烈建议您阅读以下链接:
答案 1 :(得分:2)
嗨,我知道我在这个帖子上迟到了,但是我只是遇到了这个问题并且很难解决它,所以我想我可能会分享我设置的内容。
首先要做的事情是:如果你想“作为特定用户”运行Jenkins工作(具有所有正确的习惯),最简单的方法是以此用户身份运行Jenkins SLAVE 。
然后你可能会偶然发现以下内容:你可能想在与Windows 服务相同的Windows机器上运行多个从属服务器。这是非常好的,只要每个奴隶都有自己的Remote root directory
并且可能也有一个特定的“标签”。
成功运行奴隶作为Windows服务后,启动服务控制台(运行services.msc)。编辑新创建的服务属性,转到“登录”选项卡。选择“登录为:此帐户”并输入您的帐户凭据。
干杯:)
答案 2 :(得分:1)
您可以使用内置的Windows runas或Powershell InvokeCommand cmdlet和-Credential来运行 - 这两者都会以纯文本形式存储用户名/密码 - 所以要考虑风险,但这会给您灵活性。
我很惊讶这并没有更好的答案,在另一台机器上设置代理作为另一项服务运行并将代理定义为特殊的"类型"拿起工作 - 这些方面的东西是我所期望的,但我还没有看到像詹金斯那样的实现(我刚刚接触詹金斯所以正在寻找答案并找到了这个帖子)。
对于更熟悉Jenkins的人可以考虑的其他事情是,当你设置MSBuild的自定义路径时,你可以将其设置为runas / user:... msbuild.exe也许?我目前没有额外的Jenkins服务器可以试用。